大家必须理解图的概念,在这就不做介绍了。下面直接展示代码:
//无向图的顺序存储结构
# include <stdlib.h># include <iostream.h>
# 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<zhi;i++)
{
tu.dian[i]='';//给存放图的顶点的变量赋初值
for(j=0;j<zhi;j++)
tu.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<num1;i++)
{
cout<<"请输入第"<<i+1<<"个顶点的信息:";
cin>>ch;
tu.dian[i]=ch;
}
tu.diannum=num1;
cout<<"顶点信息输入完成!\n\n\n";
//边的信息的输入
for(i=0;i<num1;i++)
{
cout<<"请依次输入第"<<i+1<<"个顶点和其他(包括自身)所有顶点是否可通?\n";
for(j=0;j<num1;j++)
{
cout<<"是否和第"<<j+1<<"个顶点可通(通:1;不同0):";
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;i<k;i++)
cout<<" "<<tu.dian[i];
cout<<"\n";
for(i=0;i<k;i++)
{
cout<<" "<<tu.dian[i]<<" ";//第一列为顶点的信息
for(j=0;j<k;j++)
cout<<" "<<tu.bian[i][j];//顶点和顶点之间的关系
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;
}
}
}
心得:对于图的存储,第一:我们要存储顶点的信息;第二:我们要存储顶点和顶点的关系。我们通过邻接矩阵的方式存放顶点和顶点的关系!不论是顺序存储还是链式存储,首先,要考虑,存放顶点的数据结构类型,存放顶点和顶点关系的数据结构类型,存放表头的数据结构类型,可能对于图存储的原理你很清楚,但是,你一定要亲自敲一敲,里面有很多值得我们注意的地方。