图的遍历演示Word文件下载.docx
- 文档编号:17621290
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:6
- 大小:15.77KB
图的遍历演示Word文件下载.docx
《图的遍历演示Word文件下载.docx》由会员分享,可在线阅读,更多相关《图的遍历演示Word文件下载.docx(6页珍藏版)》请在冰豆网上搜索。
bool*visited;
//访问标志数组
//图的邻接矩阵存储结构
typedefstruct{
char*vexs;
//顶点向量
intarcs[MAX_VEX][MAX_VEX];
//邻接矩阵
intvexnum,arcnum;
//图的当前顶点数和弧数
}Graph;
//队列类
classQueue{
public:
voidInitQueue(){
base=(int*)malloc(QUEUE_SIZE*sizeof(int));
front=rear=0;
}
voidEnQueue(inte){
base[rear]=e;
rear=(rear+1)%QUEUE_SIZE;
voidDeQueue(int&
e){
e=base[front];
front=(front+1)%QUEUE_SIZE;
int*base;
intfront;
intrear;
};
//图G中查找元素c的位置
intLocate(GraphG,charc){
for(inti=0;
i<
G.vexnum;
i++)
if(G.vexs[i]==c)returni;
return-1;
//创建无向网
voidCreateUDN(Graph&
G){
inti,j,w,s1,s2;
chara,b,temp;
printf("
输入顶点数和弧数:
"
);
scanf("
%d%d"
&
G.vexnum,&
G.arcnum);
temp=getchar();
//接收回车
G.vexs=(char*)malloc(G.vexnum*sizeof(char));
//分配顶点数目
输入%d个顶点.\n"
G.vexnum);
for(i=0;
i++){//初始化顶点
输入顶点%d:
i);
%c"
G.vexs[i]);
i++)//初始化邻接矩阵
for(j=0;
j<
j++)
G.arcs[i][j]=INFINITY;
输入%d条弧.\n"
G.arcnum);
G.arcnum;
i++){//初始化弧
输入弧%d:
%c%c%d"
a,&
b,&
w);
//输入一条边依附的顶点和权值
s1=Locate(G,a);
s2=Locate(G,b);
G.arcs[s1][s2]=G.arcs[s2][s1]=w;
//图G中顶点k的第一个邻接顶点
intFirstVex(GraphG,intk){
if(k>
=0&
&
k<
G.vexnum){//k合理
if(G.arcs[k][i]!
=INFINITY)returni;
//图G中顶点i的第j个邻接顶点的下一个邻接顶点
intNextVex(GraphG,inti,intj){
if(i>
i<
G.vexnum&
j>
j<
G.vexnum){//i,j合理
for(intk=j+1;
k<
k++)
if(G.arcs[i][k]!
=INFINITY)returnk;
//深度优先遍历
voidDFS(GraphG,intk){
inti;
if(k==-1){//第一次执行DFS时,k为-1
if(!
visited[i])DFS(G,i);
//对尚未访问的顶点调用DFS
else{
visited[k]=true;
%c"
G.vexs[k]);
//访问第k个顶点
for(i=FirstVex(G,k);
i>
=0;
i=NextVex(G,k,i))
//对k的尚未访问的邻接顶点i递归调用DFS
//广度优先遍历
voidBFS(GraphG){
intk;
QueueQ;
//辅助队列Q
Q.InitQueue();
visited[i]){//i尚未访问
visited[i]=true;
G.vexs[i]);
Q.EnQueue(i);
//i入列
while(Q.front!
=Q.rear){
Q.DeQueue(k);
//队头元素出列并置为k
for(intw=FirstVex(G,k);
w>
w=NextVex(G,k,w))
visited[w]){//w为k的尚未访问的邻接顶点
visited[w]=true;
G.vexs[w]);
Q.EnQueue(w);
//主函数
voidmain(){
GraphG;
CreateUDN(G);
visited=(bool*)malloc(G.vexnum*sizeof(bool));
\n广度优先遍历:
"
visited[i]=false;
DFS(G,-1);
\n深度优先遍历:
BFS(G);
\n程序结束.\n"
输出结果为(红色为键盘输入的数据,权值都置为1):
89
输入8个顶点.
输入顶点0:
a
输入顶点1:
b
输入顶点2:
c
输入顶点3:
d
输入顶点4:
e
输入顶点5:
f
输入顶点6:
g
输入顶点7:
h
输入9条弧.
输入弧0:
ab1
输入弧1:
bd1
输入弧2:
be1
输入弧3:
dh1
输入弧4:
eh1
输入弧5:
ac1
输入弧6:
cf1
输入弧7:
cg1
输入弧8:
fg1
广度优先遍历:
abdhecfg
深度优先遍历:
abcdefgh
程序结束.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 遍历 演示