| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1330 人关注过本帖
标题:大家不要见死不救呀
只看楼主 加入收藏
逍遥自我
Rank: 1
等 级:新手上路
帖 子:47
专家分:0
注 册:2004-9-30
收藏
 问题点数:0 回复次数:4 
大家不要见死不救呀
[求助]1000万火急,帮看看呀!!!!
  1. //你们帮我看看呀,求求各位了 //调用DFS时就是出错,但是调用OUTGraph(G)却可以。

//下面是一个关于图的程序,以存储矩阵存储,但是进行遍历就出现错误

#include<iostream.h> #include<malloc.h> #include<stdio.h> #include<stdlib.h>

#define OK 1 #define ERROR -1 #define OVERFLOW -2 #define Null 0 #define MAX_VERTEX_NUM 20

typedef char Vertextype;//char类型

typedef struct ArcNode{ //边结点 int adjvex; struct ArcNode *nextarc; //下一个结点 }ArcNode;

typedef struct VNode{ //顶点结点 Vertextype date; //图的顶点名 ArcNode *first; }VNode,Adjlist[MAX_VERTEX_NUM];

typedef struct{ //以图的邻接表存储图 Adjlist vertices; int vexnum,arcnum; //顶点数和边数 }ALGraph;

int visited[MAX_VERTEX_NUM];//访问数组标志

//找到输入顶点的位置 int Locatnode(Adjlist L,Vertextype node) { //确定输入点在图中的位置 int i=0; while(L[i].date !=node) i++; return i; }

void CreatGraph(ALGraph &G) { //用邻接表存储一个图 cout<<"请输入图顶点的个数:"<<endl; cin>>G.vexnum; cout<<"输入顶点:"<<endl; int i; ArcNode *p; for(i=0;i<G.vexnum;i++) //对图进行初试化 { cin>>G.vertices[i].date; //输入顶点 p=(ArcNode*)malloc(sizeof(ArcNode)); //建立带有带有头结点的邻接链表 p->nextarc=Null; G.vertices[i].first=p; } //输入邻接顶点 cout<<"输入边的个数:"<<endl; cin>>G.arcnum;//输入边数 int k,j; char ch1,ch2; ArcNode *q; for(i=0;i<G.arcnum;i++) //建立邻接表 { cout<<"请输入邻接的两个顶点:"<<endl; cin>>ch1>>ch2; k=Locatnode(G.vertices,ch1); j=Locatnode(G.vertices,ch2); p=G.vertices[k].first; //创建另一个以j为顶点的链表

q=(ArcNode*)malloc(sizeof(ArcNode)); q->adjvex=j; //将与k顶点相邻的顶点j输入 q->nextarc=p->nextarc; //在头结点与第一个顶点间插入元素 p->nextarc=q;

//创建另一个以j为顶点的链表 p=G.vertices[j].first; q=(ArcNode*)malloc(sizeof(ArcNode)); q->adjvex=k; //将与k顶点相邻的顶点j输入 q->nextarc=p->nextarc; //在头结点与第一个顶点间插入元素 p->nextarc=q; } for(i=0;i<G.vexnum;i++) //初始化访问数组 visited[i]=false; }

ArcNode *q; //定义一个变量

void DFS(ALGraph G,int i) { //从第i个顶点遍历连通图 visited[i]=true; cout<<G.vertices[i].date; for(q=G.vertices[i].first->nextarc;q;q=q->nextarc) { if(!visited[q->nextarc->adjvex]) DFS(G,q->adjvex); } }

void OUTGraph(ALGraph G)//从第一个顶点将图的邻接表输出 { int i; ArcNode *p; for(i=0;i<G.vexnum;i++) { cout<<G.vertices[i].date<<" "; for(p=G.vertices[i].first->nextarc;p;p=p->nextarc) cout<<G.vertices[p->adjvex].date<<' '; cout<<endl; } }

void main() { ALGraph G; CreatGraph(G); OUTGraph(G); DFS(G,0); //从第一个顶点遍历图,是连通图将整个图输出 }

搜索更多相关主题的帖子: 见死不救 
2004-10-08 12:55
好学
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
帖 子:622
专家分:318
注 册:2004-5-4
收藏
得分:0 
隐隐约约象是C++的问题,太难了点啊,看见这么长的代码就头晕,不过帮你顶。
2004-10-08 14:52
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
收藏
得分:0 
大家不要见死不救呀

去VC++版块去~~


淘宝杜琨
2004-10-08 16:13
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
收藏
得分:0 

实在不好意思,因为工作很忙,需要给单位系统添加的功能一个接一个,而且系统还有BUG要调试...

但是我还是将你的程序一些明显的不妥之处纠正了一下,希望你能在以后的编程中养成良好的习惯.

程序的逻辑我没有仔细阅读,因为修改完了还要工作.

以下是修改后的程序,不能在C编译器上使用,最好在VC++6.0中使用:

//下面是一个关于图的程序,以存储矩阵存储,但是进行遍历就出现错误

#include<iostream> #include<windows.h> #include<vector> using namespace std;

#define MAX_VERTEX_NUM 20

int visited[MAX_VERTEX_NUM];//访问数组标志

struct ArcNode { //边结点 int adjvex; ArcNode *nextarc; //下一个结点 };

typedef struct VNode { //顶点结点 char date; //图的顶点名 ArcNode *first; }Adjlist[MAX_VERTEX_NUM];

struct ALGraph { //以图的邻接表存储图 Adjlist vertices; int vexnum,arcnum; //顶点数和边数 };

//找到输入顶点的位置 int Locatnode(Adjlist L,char node) { //确定输入点在图中的位置 register int i = 0; while(L[i].date != node) i++; return i; }

void CreatGraph(ALGraph &G) { //用邻接表存储一个图 cout << "请输入图顶点的个数:" << endl; cin >> G.vexnum; cout << "输入顶点:" << endl; ArcNode *p = NULL; for(int i=0;i<G.vexnum;i++) //对图进行初试化 { cin >> G.vertices[i].date; //输入顶点 p = new ArcNode; memset(p,0,sizeof(ArcNode)); //建立带有带有头结点的邻接链表 G.vertices[i].first = p; } //输入邻接顶点 cout << "输入边的个数:" << endl; cin >> G.arcnum;//输入边数 int k = 0,j = 0; char ch1 = '\0',ch2 = '\0'; ArcNode *q = NULL; for(i=0;i<G.arcnum;i++) //建立邻接表 { cout << "请输入邻接的两个顶点:" << endl; cin >> ch1 >> ch2; k = Locatnode(G.vertices,ch1); j = Locatnode(G.vertices,ch2); p = G.vertices[k].first; //创建另一个以j为顶点的链表 q = new ArcNode; memset(q,0,sizeof(ArcNode)); q->adjvex = j; //将与k顶点相邻的顶点j输入 q->nextarc = p->nextarc; //在头结点与第一个顶点间插入元素 p->nextarc = q; //创建另一个以j为顶点的链表 p = G.vertices[j].first; q = new ArcNode; memset(q,0,sizeof(ArcNode)); q->adjvex = k; //将与k顶点相邻的顶点j输入 q->nextarc = p->nextarc; //在头结点与第一个顶点间插入元素 p->nextarc = q; }

for(i=0;i<MAX_VERTEX_NUM;i++) //初始化访问数组 visited[i] = 0; }

void DFS(ALGraph G,int i) { //从第i个顶点遍历连通图 visited[i] = true; ArcNode *q = NULL; //定义一个变量 cout << G.vertices[i].date; ArcNode* pNode = NULL; pNode = G.vertices[i].first; if (pNode) { q = pNode->nextarc; while (q) { if (q) { if (q->nextarc) if(!visited[q->nextarc->adjvex]) DFS(G,q->adjvex); q = q->nextarc; } } } }

void OUTGraph(ALGraph G)//从第一个顶点将图的邻接表输出 { ArcNode *p = NULL; for(int i=0;i<G.vexnum;i++) { cout << G.vertices[i].date << " "; ArcNode* pNode = NULL; pNode = G.vertices[i].first; if (pNode) { p = pNode->nextarc; while (p) { if (p) { cout<<G.vertices[p->adjvex].date<<' '; p = p->nextarc; } } } cout << endl; } }

void main() { ALGraph G; CreatGraph(G); OUTGraph(G); DFS(G,0); //从第一个顶点遍历图,是连通图将整个图输出 }

又是通宵调代码...不过有MM相陪(一位很厉害的VC程序员呦)~~~

[此贴子已经被作者于2004-10-08 22:20:16编辑过]


I am a big fan of c plus plus.
2004-10-08 22:17
C++大粉丝
Rank: 4
等 级:贵宾
威 望:10
帖 子:477
专家分:0
注 册:2004-4-23
收藏
得分:0 
还有,你的问题标题请改一下,改成"数据结构问题(图)"

I am a big fan of c plus plus.
2004-10-08 22:21
快速回复:大家不要见死不救呀
数据加载中...
 
   



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

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