| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1040 人关注过本帖
标题:我的错在哪里,输出不了(深度优先搜索算法)
只看楼主 加入收藏
小熊飞飞
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2008-6-13
收藏
 问题点数:0 回复次数:1 
我的错在哪里,输出不了(深度优先搜索算法)
# include<stdio.h>
# define MAX 32767      //最大值32767
# define MAXVEX_NUM 20  //顶点数 20
typedef struct AreCell {
           int adj;     //表示用整数表示是否有边,若为32767则无边,若是其它数,则表示有边,则权为这个整数。
}AdjMatrix[MAXVEX_NUM][MAXVEX_NUM];  //表示边的结构体
typedef struct{
char vexs[MAXVEX_NUM];//顶点数组
AdjMatrix arcs;//边
int vexnum,arcnum;//顶点数量和边的数量
}Graph;//图
char v1,v2;//以上是图创建的定义;
int visited[MAXVEX_NUM];//访问标记,1表是访问了,0表是没有访问;
int LocateVex(Graph *G,char v){
 int i;
 for(i=1;i<G->vexnum+1;i++)
    if(G->vexs[i]==v)
      return i;
    else return -1;
}
void CreateGraph(Graph *G){
 int i,j,l,k;
    int w;
 printf("请输入图的顶点数,边数:\n");
 scanf("%d%d",&G->vexnum ,&G->arcnum);
 for(i=1;i<G->vexnum+1;i++)//输入顶点
 {  printf("输入第%d个顶点\n",i);
    scanf("%c",&G->vexs[i]);
     getchar();//消去回车符,要不然会出错,试了好久才试成功,哈哈
 }
for(l=1;l<G->arcnum+1;l++)//初始化边,每个顶点都不相邻
           for(j=1;j<G->arcnum+1;j++)
      G->arcs[i][j].adj=MAX;
for(k=1;k<G->arcnum+1;k++)//给边赋值
{
   printf("请输入第%d条边的两顶点及其权:\n",k);
   printf("请输入第1个顶点:\n");
      scanf("%c",&v1);
   getchar();//消去回车符
      printf("请输入第2个顶点:\n");
   scanf("%c",&v2);
      getchar();//消去回车符
      printf("请输入这条边的权:\n");
      scanf("%d",&w);
      i=LocateVex(G,v1);
      j=LocateVex(G,v2);
      G->arcs[i][j].adj=w;//这个是无向图的赋值,如果是有向图则下面的G->arcs[j][i]=G->arcs[i][j]不用
      G->arcs[j][i]=G->arcs[i][j];}
}
int FirstAdjVex(Graph *G, int v){
 int i;
 for(i=1;i<G->vexnum+1;i++)
         if(G->arcs[v][i].adj!=MAX)
         return i;
        else
      return -1;
}
int NextAdjVex(Graph *G,int v,int w){
 int i;
for(i=w+1;i<G->vexnum+1;i++)
     if(G->arcs[v][i].adj!=MAX)
   return i;
  else
   return -1;
}
void DFS(Graph *G,int v){
 int w;
    visited[v]=1;
    printf("%c",G->vexs[v]);;
 for(w=FirstAdjVex(G,v);w!=-1;w=NextAdjVex(G,v,w))
      if(!visited[w])
    DFS(G,w);
}
void DFSTraverse(Graph *G){
 int v;
 for(v=1;v<G->vexnum+1;v++)
  visited[v]=0;
      for(v=1;v<G->vexnum+1;v++)
         if(!visited[v])
       DFS(G,v);
  
}
void main(){
    Graph *G,b;
 G=&b;
 CreateGraph(G);
 printf("%c",&G->vexs[1]);
    DFSTraverse(G);
}
搜索更多相关主题的帖子: 优先搜索 算法 深度 MAX 
2008-07-23 14:09
yyppaag
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2008-7-21
收藏
得分:0 
int LocateVex(Graph *G,char v){
int i;
for(i=1;i<G->vexnum+1;i++)
    if(G->vexs[i]==v)
      return i;
    else return -1;//定位有问题~,应该在所有的接点边历后,如果没有邻接点,才返回-1
}
2008-07-26 21:11
快速回复:我的错在哪里,输出不了(深度优先搜索算法)
数据加载中...
 
   



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

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