C語言圖的建立及BFS,DFS遍歷的代碼


把開發過程中經常用到的一些內容段做個收藏,下面內容段是關於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;
}
}
}




 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM