推荐给好友 上一篇 | 下一篇

DFS和BFS源代码

P:| },kt {)R%nBSD爱好者乐园(p)z!lsf WBG-o
#define maxnode 40
d;\$Q,dDf D^A`2or#define null 0
Pb5_V(bG#define m    20
7t$LKakmI6ov#include <stdio.h>BSD爱好者乐园)A?@:bG
#include <stdlib.h>
uC'ut#Vtypedef struct st_arc
beP$A4Hi [{int adjvex;
zZ7hs9u{`Y^ int weight;
JAW h^I6~.S)C g struct st_arc *nextarc;BSD爱好者乐园OES3|xsM
}arcnode;BSD爱好者乐园K!Q)q'Go\
typedef structBSD爱好者乐园3\~nMb` lt!l
{int vertex;BSD爱好者乐园Z1t}F*OWC|o
 struct st_arc *firstarc;
}UKEn;|J{}vernode;
|f3c*u&[e)fhs_typedef vernode adjlist[maxnode];BSD爱好者乐园;Yz2?)};P$]'EV'h
int queue[maxnode];
mZ`j9?/U6j;l \ ] BSD爱好者乐园2q5|z(WeK*L o

BSD爱好者乐园4_ N3G'?Dy~

void dfs(adjlist g,int k,int visited[])              //从顶点k出发,深度优先搜索BSD爱好者乐园'p {.W4p"r;O'\#_
{arcnode *p;BSD爱好者乐园I i Kb5~
 int w;
Ov } O(c visited[k]=1;BSD爱好者乐园R[nKvo
 printf("%d",g[k].vertex);
A!jJ*waqkyx.X p=g[k].firstarc;BSD爱好者乐园J;K,H&y t C!qj_,l
 while(p!=null)BSD爱好者乐园(o c;r/wm `E!jb
 {w=p->adjvex;BSD爱好者乐园8w$QX9PI8Hf
 if(visited[w]==0)
,Qb;n~zl        dfs(g,w,visited);BSD爱好者乐园LA]:TR5T$e
 p=p->nextarc;BSD爱好者乐园7e3E vi*R
 }BSD爱好者乐园O5vG9}|7xI
}BSD爱好者乐园Ch Ff8Y8X+}t
 BSD爱好者乐园;@!O$~FI%A3@ R

BSD爱好者乐园-dvM;YT0s t-QD

void bfs(adjlist g,int k,int visited[])              //从顶点k出发,广度优先搜索
!R c IaYmn{int front=0,rear=1,w;BSD爱好者乐园o{]#}ZQ
 arcnode *p;BSD爱好者乐园3R8|Oft t\7\{
 visited[k]=1;                                //访问初始顶点
il7KOC printf("%d",k);
#@@|_Sm IiE queue[rear]=k;                               //初始顶点入队列BSD爱好者乐园:A yFW3mC$l)I
 while(front!=rear)                           //队列不为空
1s.vXF6Q {front=(front+1)%m;BSD爱好者乐园2K2\J [(o'@9^
 w=queue[front];                             //按访问次序依次出队列
%Y5?9Ooi9cAO0W$S%Z p=g[w].firstarc;BSD爱好者乐园,?#O.|4y+Ls*S I W
 while(p!=null)
V.g;d&Gu5O {if(visited[p->adjvex]==0)BSD爱好者乐园|eF-QzBl"v1d } y
 {visited[p->adjvex]=1;BSD爱好者乐园ZK}o1tu'cb:a*x
   printf("%d",p->adjvex);
IMfr|6~ q   rear=(rear+1)%m;
(i PgL;a   queue[rear]=p->adjvex;;
1WAFN'ro }BSD爱好者乐园4s lo.DbU
 p=p->nextarc;
Z2JA||{ }
C#[FcT1Wi }
zG~*uNx%z0Z'u D}BSD爱好者乐园j ^0v9U@!G
 BSD爱好者乐园#] v&ZIb(j7|h

BSD爱好者乐园kJB%T2q[

void trave_bfs(adjlist g,int n)
'b#e y%dO7Ro{int i,visited[maxnode];                   //数组visited标志图中的顶点是否已被访问BSD爱好者乐园z0S;f]z2l K
 for(i=1;i<=n;i++)
-F/u~K8~Yy B\        visited[i]=0;
u\CyFUUF for(i=1;i<=n;i++)
uiS`Z}3yU        if(visited[i]==0)BSD爱好者乐园xW^zU+G7W
               bfs(g,i,visited);
%E L E z%~Q N}BSD爱好者乐园2}&i hf6h&Xe
 

"fy#Hc*eg8P!F1p

[C8T*c$r*{'k#c+G;T2bvoid trave_dfs(adjlist g,int n)BSD爱好者乐园:?R+AF3}Pc
{int i,visited[maxnode];                   //数组visited标志图中的顶点是否已被访问
QP8H b `~lR h\ for(i=1;i<=n;i++)
/{s `&b qw`'I        visited[i]=0;BSD爱好者乐园 ~$R8FE;F6Ub;A
 for(i=1;i<=n;i++)
9tE9BU5r:UX0}        if(visited[i]==0)
7OT}*W c&l_,frd               dfs(g,i,visited);BSD爱好者乐园v@0E/d8`}C2Y
}BSD爱好者乐园bv!McuB{R
 

3r7m#Jz5MdV;ag

S&?m;e3` K0Vn9B3Wvoid print(adjlist g,int n)BSD爱好者乐园2i+E1v@c4~/Es2k
 {arcnode *q;BSD爱好者乐园 s4H)C5Z^5m"i r
 int i;BSD爱好者乐园F {RXW
 printf("输出无向图的邻接链表示:\n");
iPO?-Dg2v.| for(i=1;i<=n;i++)BSD爱好者乐园c!q7C'ZBd
 {printf("\t%d\t",i);
9|0C:`~/k   printf("%d->",g[i].vertex);
RM~t,{A$T   q=g[i].firstarc;
QX)h:z6_   while(q!=null)
y1h4Mp~   {printf("%d",q->adjvex);
/K~%H?9?3`uz    printf("%d->",q->weight);BSD爱好者乐园2I$u3u ADGf4jV
       q=q->nextarc;
y IZrZz)b   }BSD爱好者乐园X8oA dp;`7Ro
   printf("\n");
~4}(t G8f"fz }BSD爱好者乐园Y0ZpO*hesw
 }BSD爱好者乐园6\sL |0`#jk5s
 BSD爱好者乐园Db/HQ)TRig

G2d eFecC!O"sEs int main()BSD爱好者乐园[2{ m0zz'd m/\
 {arcnode *p,*q;BSD爱好者乐园!z/F+R'G)DA
 adjlist g;BSD爱好者乐园 h7PqP4E
 int i,j,n,k,w,e;
`}v(y0n printf("输入图中顶点的个数,边数:");BSD爱好者乐园w8^z*m$lDs
 scanf("%d,%d",&n,&e);
D9bR [4rrj R for(k=1;k<=n;k++)BSD爱好者乐园B3U3[PC&a3dC:c
 {getchar();BSD爱好者乐园+oKh]'Q8~-W"[4b
 printf("\t第%d个顶点信息:",k);
7w*S B2e9Rs:},j E(p'u scanf("%d",&g[k].vertex);
T^6S:U2Kvl,`5Y g[k].firstarc=null;                          //对顺序存储部分初始化BSD爱好者乐园`.[s0P3[PTr
 }
J4xVU:sdb for(k=1;k<=e;k++)BSD爱好者乐园:| s_/k2IN ~,z
 {printf("第%d条边的起点,终点,权值:",k);BSD爱好者乐园`\wC|
 scanf("%d,%d,%d",&i,&j,&w);
`5V-A3I+_7AQ%xWk q=(arcnode *)malloc(sizeof(arcnode));
2Y wt,MBC,C N.h { q->adjvex=j;
,K)} gr'R)Vs/Fp q->weight=w;
I)t5A4M)d D] q->nextarc=g[i].firstarc;BSD爱好者乐园3h} SXN/}c*]
 g[i].firstarc=q;
W1ML juE$ZG Cx1K p=(arcnode *)malloc(sizeof(arcnode));
xQDx} p->adjvex=i;BSD爱好者乐园6JA&pwL"?
 p->weight=w;
"g${"eI~Y _5X9]t:n p->nextarc=g[j].firstarc;BSD爱好者乐园8fj,Q1U0UB _
 g[j].firstarc=p;BSD爱好者乐园 Q_.JM ]H0E8G"xU
 }
@WT-Yh2|D \8X print(g,n);
.s+p s:e,N+b(C printf("\n");BSD爱好者乐园k,p0S._#}
 printf("图的深度优先搜索:");
U/`{VG]u]1n:Wy trave_dfs(g,n);BSD爱好者乐园G DYdx
 printf("\n");BSD爱好者乐园_FbxO5C |D$c
 printf("图的广度优先搜索:");
U*I%u4adp"d)] trave_bfs(g,n);BSD爱好者乐园{%]}9Kmd#E
 printf("\n");BSD爱好者乐园9t\Y!v}N d
 }

2Na5[ R!g~;_
[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
TAG: 源代码 DFS BFS
 

评分:0

我来说两句

seccode