| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 783 人关注过本帖
标题:[求助]图的深度优先搜索 看哪出错了
只看楼主 加入收藏
小家伙2004
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-5-19
收藏
 问题点数:0 回复次数:1 
[求助]图的深度优先搜索 看哪出错了
#include <stdio.h>
#include <malloc.h>
#define MAX 100
int Visit[MAX]={0};
typedef struct {
int vexs[MAX];
int arcs[MAX][MAX];
int vexnum,arcnum;
}AdjMatrix;
int LocateVex(AdjMatrix &G,int u)
{
int j;
for(int i=0;i<G.vexnum;i++)
if(G.vexs[i]==u)
{j=i;break;}
return j;
}
void GreateGraph(AdjMatrix &G)
{
int v1,v2;int a,b;
printf("请输入顶点个数和边数:");
scanf("%d%d",&G.vexnum,&G.arcnum);
for(int i=0;i<G.vexnum;i++)
for(int j=0;j<G.vexnum;j++)
G.arcs[i][j]=0;
printf("请输入顶点元素:");
for(int m=0;m<G.vexnum;m++)
scanf("%d",&G.vexs[m]);
for(int k=0;k<G.arcnum;k++)
{
printf("请输入边:");
scanf("%d%d",&v1,&v2);
a=LocateVex(G,v1);
b=LocateVex(G,v2);
G.arcs[a][b]=G.arcs[b][a]=1;
}
}
int FristAdjVex(AdjMatrix G,int v)
{
int i,j,k;
i=LocateVex(G,G.vexs[v]);
for(j=0;j<G.vexnum;j++)
{
if(G.arcs[i][j]!=0)
{k=j;break;}
}
return k;
}
int NextAdjVex(AdjMatrix G,int v,int w)
{
int i,j,k;
i=LocateVex(G,G.vexs[v]);
for(j=0;j<G.vexnum;j++)
{
if(G.arcs[i][j]!=0&&j!=w)
{k=j;break;}
}
return k;
}
void DFS(AdjMatrix G,int v)
{
printf("%d->",G.vexs[v]);
Visit[v]=1;
for(int w=FristAdjVex(G,v);w>=0;w=NextAdjVex(G,v,w))
if(!Visit[w])
DFS(G,w);
}
void main()
{
AdjMatrix G;
GreateGraph(G);
DFS(G,0);
}
这是个无向图 当输入下面的边时 运行结果就不对
(1,2)(1,3)(2,4)(2,5)(4,8)(5,8)(3,6)(3,7)(6,7)
我不知道为什么
哪位大哥能帮我看看 非常感谢
搜索更多相关主题的帖子: 优先搜索 深度 int MAX 
2006-05-27 10:46
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用小家伙2004在2006-5-27 10:46:00的发言:
#include <stdio.h>
#include <malloc.h>
#define MAX 100
int Visit[MAX]={0};
typedef struct {
int vexs[MAX];
int arcs[MAX][MAX];
int vexnum,arcnum;
}AdjMatrix;
int LocateVex(AdjMatrix &G,int u)
{
int j;
for(int i=0;i<G.vexnum;i++)
if(G.vexs[i]==u)
{j=i;break;}
return j;
}
void GreateGraph(AdjMatrix &G)
{
int v1,v2;int a,b;
printf("请输入顶点个数和边数:");
scanf("%d%d",&G.vexnum,&G.arcnum);
for(int i=0;i<G.vexnum;i++)
for(int j=0;j<G.vexnum;j++)
G.arcs[i][j]=0;
printf("请输入顶点元素:");
for(int m=0;m<G.vexnum;m++)
scanf("%d",&G.vexs[m]);
for(int k=0;k<G.arcnum;k++)
{
printf("请输入边:");
scanf("%d%d",&v1,&v2);
a=LocateVex(G,v1);
b=LocateVex(G,v2);
G.arcs[a][b]=G.arcs[b][a]=1;
}
}
int FristAdjVex(AdjMatrix G,int v)
{
int i,j,k;
i=LocateVex(G,G.vexs[v]);
for(j=0;j<G.vexnum;j++)
{
if(G.arcs[i][j]!=0)
{k=j;break;}
}
return k;
}
int NextAdjVex(AdjMatrix G,int v,int w)
{
int i,j,k;
i=LocateVex(G,G.vexs[v]);
for(j=0;j<G.vexnum;j++)
{
if(G.arcs[i][j]!=0&&j!=w)
{k=j;break;}
}
return k;
}
void DFS(AdjMatrix G,int v)
{
printf("%d->",G.vexs[v]);
Visit[v]=1;
for(int w=FristAdjVex(G,v);w>=0;w=NextAdjVex(G,v,w))
if(!Visit[w])
DFS(G,w);
}

void DFS(AdjMatrix *G,int v)
{
printf("%d->",G->vexs[v]);
Visit[v]=1;
for(int w=0;w<G->vexnum;w++)
if(!Visit[w] && G->arcs[v][w])
DFS(G,w);
}

void main()
{
AdjMatrix G;
GreateGraph(G);
DFS(&G,0);
}
这是个无向图 当输入下面的边时 运行结果就不对
(1,2)(1,3)(2,4)(2,5)(4,8)(5,8)(3,6)(3,7)(6,7)
我不知道为什么
哪位大哥能帮我看看 非常感谢

如果把引用全改成指针的话,你这个深度优先遍历就出现错误,输出结果不全。
我改了下DFS,这样就对了。


2006-05-27 12:17
快速回复:[求助]图的深度优先搜索 看哪出错了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.043522 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved