无向图的顺序存储结构(代码)

大家必须理解图的概念,在这就不做介绍了。下面直接展示代码:


//无向图的顺序存储结构

# include
# include

# define zhi 40

//定义图的数据类型
struct mygraphic
{
char dian[zhi];//存放顶点的信息
int bian[zhi][zhi];//存放边的信息
int diannum;//存放顶点的个数
};

//图的初始化,给元素赋上相应的初值
void chushihua(struct mygraphic &tu)
{
int i,j;
tu.diannum=0;
for(i=0;i {
tu.dian[i]='';//给存放图的顶点的变量赋初值
for(j=0;jtu.bian[i][j]=0;//给存放图顶点和顶点关系的变量赋初值
}
}

//图的输入
void shuru(struct mygraphic &tu)
{
int i;
int j;
int num1;//存放总共要输入顶点的个数
char ch;//存放顶点信息

cout<<"请输入要输入的图的顶点的个数:";
cin>>num1;

if(num1>zhi)//程序的健壮性
{
cout<<"此图信息太大,无法存储该图!\n";
return;
}
//顶点信息的输入
for(i=0;i {
cout<<"请输入第"<cin>>ch;
tu.dian[i]=ch;
}
tu.diannum=num1;
cout<<"顶点信息输入完成!\n\n\n";

//边的信息的输入
for(i=0;i {
cout<<"请依次输入第"<
for(j=0;j{
cout<<"是否和第"<cin>> tu.bian[i][j];
}
cout<<"\n";
}
cout<<"边的输入结束!\n\n";
}


//图的输出函数
void shuchu(struct mygraphic &tu)
{
int i;
int j;
int k;
k=tu.diannum;
//输入第一行顶点的信息
cout<<" 顶 点";
for(i=0;icout<<" "<
cout<<"\n";
for(i=0;i {
cout<<" "<
for(j=0;jcout<<" "<cout<<"\n";
}
cout<<"注意:1表示两顶点可通;0表示两顶点不可通!\n\n";
cout<<"输出操作已完成!\n\n";
}

//主函数
void main()
{
int option;//存放用户的选项

struct mygraphic tu;//定义存放图信息的变量类型
chushihua(tu);//初始化图的变量类型

option=0;//存放用户的选项
while(option!=3)
{
cout<<"\n 菜单\n\n";
cout<<" 1、输入图的信息\n";
cout<<" 2、输出图的信息\n";
cout<<" 3、退出\n\n";
cout<<"请输入选项:";
cin>>option;

switch(option)
{
case 1:
shuru(tu);
break;
case 2:
shuchu(tu);
break;
case 3:
break;
default:
break;
}
}

}


心得:对于图的存储,第一:我们要存储顶点的信息;第二:我们要存储顶点和顶点的关系。我们通过邻接矩阵的方式存放顶点和顶点的关系!不论是顺序存储还是链式存储,首先,要考虑,存放顶点的数据结构类型,存放顶点和顶点关系的数据结构类型,存放表头的数据结构类型,可能对于图存储的原理你很清楚,但是,你一定要亲自敲一敲,里面有很多值得我们注意的地方。

你可能感兴趣的:(无向图的顺序存储结构(代码))