标题:[求助]帮我找找错误
只看楼主
fabio210
Rank: 1
等 级:新手上路
威 望:1
帖 子:58
专家分:0
注 册:2005-11-6
 问题点数:0 回复次数:6 
[求助]帮我找找错误

#include <stdio.h>
#define MAX_VERTEX_NUM 20
#define INFINITY 32767
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define NULL 0
#define TRUE 1
#define FALSE 0
#define OUTPLACE -1
#define DG 1
#define DN 2
#define UDG 3
#define UDN 4
typedef int VRType;
typedef int Status;
typedef int VertexType;
typedef int InfoType;
typedef struct ArcCell
{
VRType adj;
InfoType info;
}ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
typedef struct{
VertexType vexs[MAX_VERTEX_NUM];
AdjMatrix arcs;
int vexnum,arcnum;
int kind;
}MGraph;
int LocateVex(MGraph *G,VertexType v)
{
int i;
for(i=0;i<MAX_VERTEX_NUM;i++)
if(v==G->vexs[i])
return i;
return OUTPLACE;
}
Status CreateGraph(MGraph *G)
{
printf("=========Create Graph==========\n");
printf("1----DG\n");
printf("2----DN\n");
printf("3----UDG\n");
printf("4----UDN\n");
printf("Please input the kind of the graph:");
scanf("%d",&G->kind);
switch(G->kind)
{
case DG: return CreateDG(G);
case DN: return CreateDN(G);
case UDG: return CreateUDG(G);
/* case UDN: return CreateUDN(G); */
default: return ERROR;
}
}
Status CreateDG(MGraph *G)
{
int i,j,k;
VertexType v1,v2;
printf("Please input the G.vexnum:");
scanf("%d",&G->vexnum);
printf("Please input the G.arcnum:");
scanf("%d",&G->arcnum);
for(i=0;i<G->vexnum;i++)
{
printf("Please input the vertex: ");
scanf("%d",&G->vexs[i]);
}
for(i=0;i<G->vexnum;i++)
for(j=0;j<G->vexnum;j++)
{ G->arcs[i][j].adj=0;
G->arcs[i][j].info=0;}
for(k=0;k<G->arcnum;k++)
{
printf("Please input the arc(v1,v2):");
scanf("%d,%d",&v1,&v2);
i=LocateVex(G,v1); j=LocateVex(G,v2);
if(i<0||j<0||i==j)
{ printf("WRONG!!!\n");
return ERROR;
}
G->arcs[i][j].adj=1;
}
return OK;
}
Status CreateDN(MGraph *G)
{
int i,j,k,w;
VertexType v1,v2;
printf("Please input the G.vexnum:");
scanf("%d",&G->vexnum);
printf("Please input the G.arcnum:");
scanf("%d",&G->arcnum);
for(i=0;i<G->vexnum;i++)
{
printf("Please input the vertex: ");
scanf("%d",&G->vexs[i]);
}
for(i=0;i<G->vexnum;i++)
for(j=0;j<G->vexnum;j++)
{ G->arcs[i][j].adj=0;
G->arcs[i][j].info=INFINITY;}
for(k=0;k<G->arcnum;k++)
{
printf("Please input the arc and the weight(v1,v2,w):");
scanf("%d,%d,%d",&v1,&v2,&w);
i=LocateVex(G,v1); j=LocateVex(G,v2);
if(i<0||j<0||i==j)
{ printf("WRONG!!!\n");
return ERROR;
}
G->arcs[i][j].adj=1;
G->arcs[i][j].info=w;
}
return OK;
}
Status CreateUDG(MGraph *G)
{
int i,j,k;
VertexType v1,v2;
printf("Please input the G.vexnum:");
scanf("%d",&G->vexnum);
printf("Please input the G.arcnum:");
scanf("%d",&G->arcnum);
for(i=0;i<G->vexnum;i++)
{
printf("Please input the vertex: ");
scanf("%d",&G->vexs[i]);
}
for(i=0;i<G->vexnum;i++)
for(j=0;j<G->vexnum;j++)
{
G->arcs[i][j].adj=0;
G->arcs[i][j].info=0;
}
for(k=0;k<G->arcnum;k++)
{
printf("Please input the arc(v1,v2):");
scanf("%d,%d",&v1,&v2);
i=LocateVex(G,v1); j=LocateVex(G,v2);
if(i<0||j<0||i==j)
{
printf("WRONG!!!\n");
return ERROR;
}
G->arcs[i][j].adj=1;
G->arcs[j][i]=G->arcs[i][j];
}
return OK;
}
/*Status CreateUDN(MGraph *G)
{
int i,j,k,w;
VertexType v1,v2;
printf("Please input the G.vexnum:");
scanf("%d",&G->vexnum);
printf("Please input the G.arcnum:");
scanf("%d",&G->arcnum);
for(i=0;i<G->vexnum;i++)
{
printf("Please input the vertex: ");
scanf("%d",&G->vexs[i]);
}
for(i=0;i<G->vexnum;i++)
for(j=0;j<G->vexnum;j++)
{
G->arcs[i][j].adj=0;
G->arcs[i][j].info=INFINITY;
}
for(k=0;k<G->arcnum;k++)
{
printf("Please input the arc and the weight(v1,v2,w):");
scanf("%d,%d,%d",&v1,&v2,&w);
i=LocateVex(G,v1); j=LocateVex(G,v2);
if(i<0||j<0||i==j)
{
printf("WRONG!!!\n");
return ERROR;
}
G->arcs[i][j].adj=1;
G->arcs[i][j].info=w;
G->arcs[j][i]=G->arcs[i][j];
}
return OK;
} */
Status PrintGraph(MGraph *G)
{
switch(G->kind)
{
case DG: return PrintDG(G);
case DN: return PrintDN(G);
case UDG: return PrintUDG(G);
/*case UDN: return PrintUDN(G);*/
default: return ERROR;
}

}
Status PrintDG(MGraph *G)
{
int i,j;
printf("========Print DG========\n");
for(i=0;i<G->vexnum;i++)
printf("%3d",G->vexs[i]);
printf("\n");
for(i=0;i<G->vexnum;i++)
for(j=0;j<G->vexnum;j++)
if(G->arcs[i][j].adj==1)
printf("%d-->%d ",G->vexs[i],G->vexs[j]);
printf("\n");
return OK;
}
Status PrintDN(MGraph *G)
{
int i,j;
printf("========Print DN========\n");
for(i=0;i<G->vexnum;i++)
printf("%3d",G->vexs[i]);
printf("\n");
for(i=0;i<G->vexnum;i++)
for(j=0;j<G->vexnum;j++)
if(G->arcs[i][j].adj==1)
printf("%d-->%d(%d) ",G->vexs[i],G->vexs[j],G->arcs[i][j].info);
printf("\n");
return OK;
}
Status PrintUDG(MGraph *G)
{
int i,j;
printf("========Print UDG========\n");
for(i=0;i<G->vexnum;i++)
printf("%3d",G->vexs[i]);
printf("\n");
for(i=0;i<G->vexnum;i++)
for(j=i;j<G->vexnum;j++)
if(G->arcs[i][j].adj==1)
printf("%d---%d ",G->vexs[i],G->vexs[j]);
printf("\n");
return OK;
}
/*Status PrintUDN(MGraph *G)
{
int i,j;
printf("========Print UDN========\n");
for(i=0;i<G->vexnum;i++)
printf("%3d",G->vexs[i]);
printf("\n");
for(i=0;i<G->vexnum;i++)
for(j=i;j<G->vexnum;j++)
if(G->arcs[i][j].adj==1)
printf("%d---%d(%d) ",G->vexs[i],G->vexs[j],G->arcs[i][j].info);
printf("\n");
return OK;
} */
main()
{
MGraph *G=NULL;
clrscr();
CreateGraph(G);
PrintGraph(G);
getch();
}

这个是创建各种图并且输出的程序,注释掉的部分是建立无向网的,不注释的话输结点的时候就乱套,求高手帮忙看看是怎么回事。

搜索更多相关主题的帖子: include 
2005-12-02 20:39
fabio210
Rank: 1
等 级:新手上路
威 望:1
帖 子:58
专家分:0
注 册:2005-11-6
得分:0 
帮帮忙啊

2005-12-02 22:44
fabio210
Rank: 1
等 级:新手上路
威 望:1
帖 子:58
专家分:0
注 册:2005-11-6
得分:0 
没人帮忙吗?

2005-12-03 13:53
草木仁
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-12-3
得分:0 
怎么那么长啊??
2005-12-03 14:25
草木仁
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-12-3
得分:0 
看了有点吓人。还帮??
2005-12-03 14:25
lateerla
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-12-3
得分:0 
好长,教科书上很短啊
2005-12-03 15:10
fabio210
Rank: 1
等 级:新手上路
威 望:1
帖 子:58
专家分:0
注 册:2005-11-6
得分:0 
长是长了点,不过内容很简单啊,书上写的算法是很短,我这里是分成四种情况创建的。

2005-12-03 15:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-36383-1-1.html




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

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