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

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


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

# 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;
}
  }

}


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值