把开发过程中经常用到的一些内容段做个收藏,下面内容段是关于C语言图的建立及BFS,DFS遍历的内容,希望对各位也有用途。
#include <stdio.h>
#include <malloc.h>#include <stdlib.h>struct tnode{ };struct node{ };struct picture{ };int main(){ char a; p=createpicture(); while(1) { getchar(); printf("现在将对图进行遍历,若使用广度优先遍历,请输入a,若使用深度优先遍历请输入b,清屏请输入c,退出请输入d:n"); scanf("%c",&a); if(a=='a') { printf("深度优先遍历如下:n"); traversebfs(p); } if(a=='b') { printf("广度优先遍历如下:n"); traversedfs(p); } if(a=='c') system("cls"); if(a=='d') exit(0); } return 0;}{ char a; printf("请输入你要建立的图中的节点数以及图的类型(a表示无向图b表示有向图):n"); scanf("%d %c",&i,&a); p->count=i; p->a=a; printf("请依次输入各节点的值(每输完一个节点的值按回车结束):n"); for(i=0;i<p->count;i++) { scanf("%d",&j); p->nd[i].valu=j; p->nd[i].link=NULL; } for(i=0;i<p->count;i++) { printf("输入与数据值为%d的节点相邻的节点的数据值(每输完一个节点的值按回车结束),若不再含有相邻的值请输入-1n",p->nd[i].valu); while(1) { scanf("%d",&k); if(k==-1) break; l=search(p,k); if(l!=-1) { t->data=l; t->next=p->nd[i].link; p->nd[i].link=t; } else printf("无此数据值!n"); } } return p;}{ int i; for(i=0;i<p->count;i++) { if(value==p->nd[i].valu) { return i; } } return -1;}{ int i; for(i=0;i<p->count;i++) { visit[i]=0; } for(i=0;i<p->count;i++) { if(visit[i]==0) { dfs(p,i,visit); } }}{ printf("%dn",q->nd[i].valu); visit[i]=1; w=q->nd[i].link; while(w!=NULL) { if(visit[w->data]==0) { dfs(q,w->data,visit); } else { w=w->next; } } }{ int i; for(i=0;i<p->count;i++) { visit[i]=0; } for(i=0;i<p->count;i++) { if(visit[i]==0) { bfs(p,i,visit); } }}{ int f,r; int v; f=r=0; visit[i]=1; printf("%dn",q->nd[i].valu); a[r]=i; while(f!=r) { v=a[f]; w=q->nd[v].link; while(w!=NULL) { if(visit[w->data]==0) { visit[w->data]=1; printf("%dn",q->nd[w->data].valu); a[r]=w->data; r++; } w=w->next; } }}