用结构体创建无向图的问题

LB228988 2013-05-10 11:43:38
#define VEXTYPE int
#define ADJTYPE int
#define MAXLEN 40
#include <stdio.h>


#include<iostream>
using namespace std;

typedef struct {
VEXTYPE vexs[MAXLEN];/*顶点数组*/
ADJTYPE arcs[MAXLEN][MAXLEN];/*边长数组*/
int vexnum,arcnum;
int kind;
}MGRAPH;

MGRAPH create_mgraph( MGRAPH &mg){/*创建图*/

int i,j,k;
mg.kind=2;/*图的种类*/
printf("\n请输入顶点数和边的条数(以逗号隔开):");
scanf("%d,%d",&i,&j);
fflush(stdin);/*清空输入流*/
mg.vexnum=i;
mg.arcnum=j;



for(i=1;i<=mg.vexnum;i++)
{ printf("请输入第%d个顶点",i);
scanf("%d",&mg.vexs[i-1]);
fflush(stdin);
}

for(i=0;i<mg.vexnum;i++){
for(j=0;j<mg.vexnum;i++){
mg.arcs[i][j]=0;
}

for(k=1;k<=mg.arcnum;k++)
{ printf("请输入第%d条边的起始顶点和终止顶点(以逗号隔开)",k);
scanf("%d,%d",&i,&j);

mg.arcs[i-1][j-1]=1;
mg.arcs[j-1][i-1]=1;

}
return mg;
}
/*
void PrintArray(MGRAPH g){
int count=0;
for(int i=0;i<g.vexnum;i++){
for(int j=0;j<g.vexnum;j++){
cout<<"("<<g.vexs[i]<<" ,"<<g.vexs[j]<<")";
cout<<g.arcs[i][j]<<" ";
count++;
if(count==g.vexnum){
cout<<endl;
count=0;
}
}
}
}
*/



void print_mgraph( MGRAPH mg )
{

int i,j;
for(i=0;i<mg.vexnum;i++){
for(j=0;j<mg.vexnum;j++){
printf("(%d,%d)%2d\t",i+1,j+1,mg.arcs[i][j]);
}
printf("\n");
}
}


void main()
{
MGRAPH mg;
mg=create_mgraph(mg);
//cout<<mg.vexnum<<endl;输出这一句为零,我在上面创建图的时候不是赋值了吗
print_mgraph(mg);
/*
mg.vexnum=3;
mg.arcnum=3;//我这样为顶点和边赋值,能够执行下面的语句
*/
//print_mgraph(mg);

// PrintArray(mg);

}
当我用函数create_mgraph创建了无向图并返回结构体对象,主函数中赋给另外一个对象,可是档我输出顶点数或则边是为零。球帮忙看下哪里出错了。
...全文
183 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
anshiny 2013-05-10
  • 打赏
  • 举报
回复
接分:
#define VEXTYPE int
#define ADJTYPE int
#define MAXLEN 40

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

using namespace std;

typedef struct {
	VEXTYPE vexs[MAXLEN];/*顶点数组*/
	ADJTYPE arcs[MAXLEN][MAXLEN];/*边长数组*/
	int vexnum,arcnum;
	int kind;
}MGRAPH;

MGRAPH create_mgraph(MGRAPH &mg){/*创建图*/
	
	int i, j, k;
	mg.kind = 2;/*图的种类*/
	printf("\n请输入顶点数和边的条数(以逗号隔开):");
	scanf("%d,%d", &i, &j);
	fflush(stdin);/*清空输入流*/
	mg.vexnum=i;
	mg.arcnum=j;	
	
	for(i=1; i<=mg.vexnum; i++){
		printf("请输入第%d个顶点",i);
		scanf("%d", &mg.vexs[i-1]);
		fflush(stdin);
	}
	
	for(i=0; i<mg.vexnum; i++){
		for(j=0; j<mg.vexnum; j++){
			mg.arcs[i][j] = 0;
		}
	}
		
	for(k=1; k<=mg.arcnum; k++){
		printf("请输入第%d条边的起始顶点和终止顶点(以逗号隔开)",k);
		scanf("%d,%d", &i, &j);
		
		mg.arcs[i-1][j-1]=1;
		mg.arcs[j-1][i-1]=1;
	}
	return mg;
}


void print_mgraph( MGRAPH mg )
{		
	int i,j;
	for(i=0; i<mg.vexnum; i++){
		for(j=0; j<mg.vexnum; j++){
			printf("(%d,%d)%2d\t", i+1, j+1, mg.arcs[i][j]);
		}
		printf("\n");
	}
}


void main()
{
	MGRAPH mg;
	mg=create_mgraph(mg);
	print_mgraph(mg);
	return;
}
LB228988 2013-05-10
  • 打赏
  • 举报
回复
沉了吗,求帮忙解决
LB228988 2013-05-10
  • 打赏
  • 举报
回复
图片结果为我想要的最终结果
LB228988 2013-05-10
  • 打赏
  • 举报
回复
引用 3 楼 anshiny 的回复:
接分:
#define VEXTYPE int
#define ADJTYPE int
#define MAXLEN 40

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

using namespace std;

typedef struct {
	VEXTYPE vexs[MAXLEN];/*顶点数组*/
	ADJTYPE arcs[MAXLEN][MAXLEN];/*边长数组*/
	int vexnum,arcnum;
	int kind;
}MGRAPH;

MGRAPH create_mgraph(MGRAPH &mg){/*创建图*/
	
	int i, j, k;
	mg.kind = 2;/*图的种类*/
	printf("\n请输入顶点数和边的条数(以逗号隔开):");
	scanf("%d,%d", &i, &j);
	fflush(stdin);/*清空输入流*/
	mg.vexnum=i;
	mg.arcnum=j;	
	
	for(i=1; i<=mg.vexnum; i++){
		printf("请输入第%d个顶点",i);
		scanf("%d", &mg.vexs[i-1]);
		fflush(stdin);
	}
	
	for(i=0; i<mg.vexnum; i++){
		for(j=0; j<mg.vexnum; j++){
			mg.arcs[i][j] = 0;
		}
	}
		
	for(k=1; k<=mg.arcnum; k++){
		printf("请输入第%d条边的起始顶点和终止顶点(以逗号隔开)",k);
		scanf("%d,%d", &i, &j);
		
		mg.arcs[i-1][j-1]=1;
		mg.arcs[j-1][i-1]=1;
	}
	return mg;
}


void print_mgraph( MGRAPH mg )
{		
	int i,j;
	for(i=0; i<mg.vexnum; i++){
		for(j=0; j<mg.vexnum; j++){
			printf("(%d,%d)%2d\t", i+1, j+1, mg.arcs[i][j]);
		}
		printf("\n");
	}
}


void main()
{
	MGRAPH mg;
	mg=create_mgraph(mg);
	print_mgraph(mg);
	return;
}
细节啊,好的给你了

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧