乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      c語言數(shù)據(jù)結(jié)構(gòu)--圖的鄰接矩陣和鄰接表操作的基本操作

       Ethan的博客 2010-11-14

      #include <stdio.h>

      #include <malloc.h>

      #include <time.h>

      #define MAX 100

      typedef char DataType;

      typedef int VectorRelationType;

      typedef char VectorType;

       

      typedef struct arcell

      {

         VectorRelationType adj;

         //DataType * data;

      }arcell, adjmatrix[MAX][MAX];

       

      //鄰接矩陣定義

      typedef struct

      {

         VectorType vexs[MAX]; //頂點向量

         adjmatrix arcs;       //鄰接矩陣

         int vexnum, arcnum;   //圖的當(dāng)前頂點數(shù)和邊數(shù)

      // GraphType kind;

      }MGraph;           

       

      typedef struct ArcNode

      {

         int adjvex;           //鄰接點在頭結(jié)點數(shù)組中的位置(下標)

         struct ArcNode * nextarc; //指向下一個表結(jié)點

         DataType * date;

      }ArcNode;

       

      //頂點結(jié)點

      typedef struct VNode

      {

         VectorType vexdata;

         ArcNode * firstarc;

      }VNode, Adjlist[MAX];

       

      //鄰接表類型定義

      typedef struct

      {

         Adjlist vexs;

         int vexnum, arcnum;

         //GraphType gtype;

      }ALGraph;

       

      //打印鄰接表

      void TraverseG(ALGraph G)

      {

         ArcNode * p;

         int i;

         printf("圖的鄰接表如下:\n");

         for(i = 0; i < G.vexnum; i++)

         {

            printf("%c ->", G.vexs[i].vexdata);

            p = G.vexs[i].firstarc;

            while(p)

            {

              printf("%d ->", p->adjvex);

              p = p->nextarc;

            }

            printf("NULL\n");

         }

      }

       

      //確定v在鄰接矩陣中位置

      int Locatevex(ALGraph * G, VectorType v)

      {

         int i;

         for(i = 0; i < G->vexnum; i++)

            if(G->vexs[i].vexdata == v)

              return (i);

         return -1;

      }

       

      int locatevexM(MGraph * G, VectorType v)

      {

         int i;

         for(i = 0; i < G->vexnum; i++)

            if(G->vexs[i] == v)

              return (i);

         return -1;

      }

       

      //建立鄰接矩陣

      void CreateMGraph(MGraph * G)

      {

         int i, j, k, w;

         VectorType u, v;

         printf("創(chuàng)建有向圖的鄰接矩陣\n");

         printf("請輸入當(dāng)前的頂點數(shù)和弧數(shù)(vex arc): \n");

         fflush(stdin);        //清空輸入緩沖區(qū),確保不影響后面的數(shù)據(jù)讀取

         scanf("%d %d", &G->vexnum, &G->arcnum);

       

         for(i = 0; i < G->vexnum; i++)

         {

            printf("請輸入第%d個頂點(vertex): \n", i+1);

            fflush(stdin);

            scanf("%c", &G->vexs[i]);

         }

       

         for(i = 0; i < G->vexnum; i++)

         {

            for(j = 0; j < G->vexnum; j++)

            {

              G->arcs[i][j].adj = 0;

            }

         }

       

         for(k = 0; k < G->arcnum; k++)

         {

            printf("請輸入頂點和權(quán)值<u v w): \n");

            fflush(stdin);

            scanf("%c %c %d", &u, &v, &w);

            i = locatevexM(G, u);

            j = locatevexM(G, v);

            G->arcs[i][j].adj = w;

         }

      }

       

       

      void CreateALGraph(ALGraph * G)

      {

         int i, j, k;

         ArcNode * s;

         char u, v;

         printf("請輸入當(dāng)前頂點數(shù)和弧數(shù)(vex arc):\n");

         fflush(stdin);

         scanf("%d %d", &G->vexnum, &G->arcnum);

         printf("首先輸入頂點:\n");

         for(i = 0; i < G->vexnum; i++)

         {

            printf("請輸入頂點%d,回車輸入下一個頂點\n", i);

            fflush(stdin);

            scanf("%c", &(G->vexs[i].vexdata));

            G->vexs[i].firstarc = NULL;

         }

       

         printf("接下來輸入弧:\n");

         for(k = 0; k < G->arcnum; k++)

         {

            printf("請輸入弧%d, 回車輸入下一條弧\n", k);

            fflush(stdin);

            scanf("%c %c", &u, &v);

            i = Locatevex(G, u);

            j = Locatevex(G, v);

            s = (ArcNode *)malloc(sizeof(ArcNode));

            s->adjvex = j;

            s->nextarc = G->vexs[i].firstarc;

            G->vexs[i].firstarc = s;

         }

      }

       

      void Print_MGraph(MGraph * G)

      {

         int i, j;

         printf("\n");

         printf("鄰接矩陣輸入如下: \n");

         printf("[]");

         for(i = 0; i < G->vexnum; i++)

            printf("%c ", G->vexs[i]);

         printf("\n");

         for(i = 0; i < G->vexnum; i++)

         {

            printf("%c ", G->vexs[i]);

            for(j = 0; j < G->vexnum; j++)

              printf("%d ", G->arcs[i][j].adj);

            printf("\n");

         }

      }

       

      //鄰接表轉(zhuǎn)換為鄰接矩陣

      void list_to_mat(ALGraph * AG, MGraph * MG)

      {

         int i, j;

         ArcNode * p;

         MG->vexnum = AG->vexnum;

         for(i = 0; i < AG->vexnum; i++)

         {

            for(j = 0; j < AG->vexnum; j++)

            {

              MG->arcs[i][j].adj = 0;

            }

         }

       

         for(i = 0; i < AG->vexnum; i++)

         {

            MG->vexs[i] = AG->vexs[i].vexdata;

         }

       

         printf("圖的頂點向量如下:\n");

         for(i = 0; i < AG->vexnum; i++)

         {

            printf("%d %c\n", i, MG->vexs[i]);

         }

       

         for(i = 0; i < AG->vexnum; i++)

         {

            p = AG->vexs[i].firstarc;

            while(p != NULL)

            {

              MG->arcs[i][p->adjvex].adj = 1;

              p = p->nextarc;

            }

         }

      }

       

      void main()

      {

         MGraph  MG;

         ALGraph AG;

         CreateALGraph(&AG);

         TraverseG(AG);

         list_to_mat(&AG, &MG);

         Print_MGraph(&MG);

         CreateMGraph(&MG);

         Print_MGraph(&MG);

      }

        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多