国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

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

#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];//頂點(diǎn)向量

   adjmatrixarcs;      //鄰接矩陣

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

// GraphType kind;

}MGraph;           

 

typedef struct ArcNode

{

   intadjvex;          //鄰接點(diǎn)在頭結(jié)點(diǎn)數(shù)組中的位置(下標(biāo))

   struct ArcNode * nextarc;//指向下一個(gè)表結(jié)點(diǎn)

   DataType * date;

}ArcNode;

 

//頂點(diǎn)結(jié)點(diǎn)

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("請(qǐng)輸入當(dāng)前的頂點(diǎn)數(shù)和弧數(shù)(vexarc): \n");

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

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

 

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

   {

     printf("請(qǐng)輸入第%d個(gè)頂點(diǎn)(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("請(qǐng)輸入頂點(diǎn)和權(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("請(qǐng)輸入當(dāng)前頂點(diǎn)數(shù)和弧數(shù)(vexarc):\n");

   fflush(stdin);

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

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

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

   {

     printf("請(qǐng)輸入頂點(diǎn)%d,回車輸入下一個(gè)頂點(diǎn)\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("請(qǐng)輸入弧%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("圖的頂點(diǎn)向量如下:\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);

}

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
C語言圖的創(chuàng)建
最小支撐樹的prim算法(反圈法)c++實(shí)現(xiàn)
圖的深度遍歷
基于鄰結(jié)矩陣的圖的BFS和DFS遍歷
鄰接矩陣表示圖的深度優(yōu)先搜索和廣度優(yōu)先搜索(一)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服