数据结构C语言实现----图
2021-04-07 07:25
阅读:536
标签:图片 出队 初始 loading 一个 算法 mamicode size_t ext
邻接表储存结构
/*邻接表的边*/ typedef struct ArcNode { int adjvex; struct ArcNode *next; }ArcNode; /*邻接表的结点*/ typedef struct VNode { char date; ArcNode *firstarc; }VNode;
创建一个邻接表储存结构的图
//创建一个邻接表类型的图 void CreatArcGraph(int count , VNode G[]) { ArcNode *p , *q; char c; //储存结点内数据 int number; //储存要连接的结点 printf("请输入各个结点的数据:\n"); for (size_t i = 0; i
图的遍历(1)-----深度优先搜索
//深度优先搜索一个连通图 void DFS(VNode G[] , int v) { int w; printf("%c" , G[v].date); //访问当前结点 printfed[v] = 1; w = FirstAdj(G , v); while (w!=-1) { if (printfed[w]==0) DFS(G,w); w = NextAdj(G , v); } } //对图G = (V,E)进行深度优化搜索的主算法 void Travel_DFS(VNode G[] , int n) { for (size_t i = 0; i
深度优先搜索实例
#include#include /*邻接表的边*/ typedef struct ArcNode { int adjvex; struct ArcNode *next; }ArcNode; /*邻接表的结点*/ typedef struct VNode { char date; ArcNode *firstarc; }VNode; //创建一个邻接表类型的图 void CreatArcGraph(int count , VNode G[]) { ArcNode *p , *q; char c; //储存结点内数据 int number; //储存要连接的结点 printf("请输入各个结点的数据:\n"); for (size_t i = 0; i next = NULL; p->adjvex = number; if (G[i].firstarc == NULL) { G[i].firstarc = p; }else { q->next = p; } q = p; scanf("%d" , &number); } } } int printfed[3]; //寻找第一个邻接点 int FirstAdj(VNode G[] , int v) { return G[v].firstarc->adjvex; } //寻找下一个邻接点 int NextAdj(VNode G[] , int v) { ArcNode *p; p = G[v].firstarc->next; while (p->next!=NULL ) { p = p->next; if (printfed[p->adjvex]==0) { return p->adjvex; } } return -1; } //深度优先搜索一个连通图 void DFS(VNode G[] , int v) { int w; printf("%c" , G[v].date); //访问当前结点 printfed[v] = 1; w = FirstAdj(G , v); while (w!=-1) { if (printfed[w]==0) DFS(G,w); w = NextAdj(G , v); } } //对图G = (V,E)进行深度优化搜索的主算法 void Travel_DFS(VNode G[] , int n) { for (size_t i = 0; i
运行结果
图的遍历(2)-------广度优先搜索
//广度优先搜索一个连通图 void BFS(VNode G[] , int v) { initQueue(&q); //首先访问当前结点 printf("%c" , G[v].date); visited[v] = 1; //访问标记 EnQueue(&q , v); //入队列 // int w; while (q.front==q.rear) { DeQueue(&q , &v); w = Firstadj(G , v); while (w!=-1) { if (visited[w]==0) { printf("%c",G[w].date); EnQueue(&q , w); visited[w] = 1; } w = Nextadj(G,v); } } } //广度优先搜索的主算法 void Travel_BFS(VNode G[] , int v) { for (size_t i = 0; i
广度优先搜索实例
如图:
#include#include ////////////////////////////////////////////////////////////////////////////// //储存类型定义 //图边 typedef struct ArcNode { int adjvex; struct ArcNode *next; }ArcNode; //图结点 typedef struct VNode { char date; ArcNode *firstarc; }VNode; //队列结点 typedef struct QNode { int date; struct QNode *next; }QNode , *QueuePtr; //队列指针 typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; //////////////////////////////////////////////////////////////////////////////// //队列操作 //创建队列 void initQueue(LinkQueue *q) { q->front = q->rear = (QueuePtr)malloc(sizeof(QNode)); if(!q->front) exit(0); q->front->next = NULL; } //入队列 void EnQueue(LinkQueue *q , int v ) { QueuePtr p; p = (QueuePtr)malloc(sizeof(QNode)); if(!q->front) exit(0); p->date = v; p->next = NULL; q->rear->next = p; q->rear = p; } //出队列 void DeQueue(LinkQueue *q , int *v) { if (q->front==q->rear) { exit(0); } QueuePtr p; p = q->front->next; *v = p->date; q->front->next = p->next; if (q->rear==p) { q->front = q->rear =NULL; } free(p); } ///////////////////////////////////////////////////////////////////////////////////// //图操作 //创建一个图(邻接表) void CreatArcNode(VNode G[] , int count) { //为结点数组输入数据 char c; printf("请输入要在各个结点存入的字符..."); for (size_t i = 0; i adjvex = number; p->next = NULL; if (G[i].firstarc==NULL) { G[i].firstarc = p; }else { q->next = p; } q = p; scanf("%d",&number); } } } /***********************************全局变量****************************************/ int visited[100]; LinkQueue q; ///////////////////////////////////////////////////////////////////////////////// //广度优先搜索操作 //寻找第一个邻接点 int Firstadj(VNode G[] , int v) { return G[v].firstarc->adjvex; } //寻找下一个邻接点 int Nextadj(VNode G[] , int v) { ArcNode *p; p = G[v].firstarc->next; while (!p->next) { p = p->next; if (visited[p->adjvex]==0) { return p->adjvex; } } return -1; } //广度优先搜索一个连通图 void BFS(VNode G[] , int v) { initQueue(&q); //首先访问当前结点 printf("%c" , G[v].date); visited[v] = 1; //访问标记 EnQueue(&q , v); //入队列 // int w; while (q.front==q.rear) { DeQueue(&q , &v); w = Firstadj(G , v); while (w!=-1) { if (visited[w]==0) { printf("%c",G[w].date); EnQueue(&q , w); visited[w] = 1; } w = Nextadj(G,v); } } } //广度优先搜索的主算法 void Travel_BFS(VNode G[] , int v) { for (size_t i = 0; i ",p->adjvex,G[p->adjvex].date); p = p->next; } }while(p!=NULL); putchar(‘\n‘); } //广度优先搜索 Travel_BFS(G , count); getchar(); return 0; }
运行结果:
数据结构C语言实现----图
标签:图片 出队 初始 loading 一个 算法 mamicode size_t ext
原文地址:https://www.cnblogs.com/jerryleesir/p/13391243.html
上一篇:C#之数据类型学习
评论
亲,登录后才可以留言!