呵呵,今天的成果!!图的数组表示法

#include "conio.h"
#include "stdio.h"
#define MAXSIZE 100      //最大顶点数
struct Graph
{
 char vexs[MAXSIZE];     //顶点数组
 int arcs[MAXSIZE][MAXSIZE];       //邻接矩阵
 int vexnum,arcnum;                //图的当前顶点数和弧数
};

main()
{
 int quit=0,i,j;
 struct Graph MGraph;    //定义一个图
 MGraph.vexnum=0;
 MGraph.arcnum=0;        //图的当前顶点数和弧数为0
 for(i=0;i<MAXSIZE;i++)  //邻接矩阵初始化
 {
  for(j=0;j<MAXSIZE;j++)
  MGraph.arcs[i][j]=0;
 }
 while(!quit)            //图的操作菜单
 {
  char ch;
  clrscr();
  puts("1 插入图节点");
  puts("2 插入弧");
  puts("3 当前节点数量");
  puts("4 察看指定节点的度");
  puts("5 察看当前邻接矩阵");
  puts("6 退出");
  ch=getch();
  switch(ch)
  {
   case '1':InsertVex(&MGraph);break;
   case '2':InsertArc(&MGraph);break;
   case '3':ShowVexNum(&MGraph);break;
   case '4':ShowDepth(&MGraph);break;
   case '5':Showarcs(&MGraph);break;
   case '6':quit=1;break;
  }
 }
}

InsertVex(struct Graph *MGraph)
{
 char data;
 clrscr();
 printf("请输入节点:");
 data=getche();         //不能用getchar,这样相当于输入了一个'/n'节点
 MGraph->vexs[MGraph->vexnum]=data;    //储存在顶点数组里
 MGraph->vexnum++;      //当前顶点+1
 puts("/n插入成功");
 printf("%d",MGraph->vexnum);
 getch();
}

InsertArc(struct Graph *MGraph)
{
 char node1,node2;
 int i,j;
 clrscr();
 printf("请输入弧的相关信息:");
 node1=getche();
 node2=getche();   //同样这里也不能用getchar
 for(i=0;i<MGraph->vexnum;i++)
 {
  printf("i:%c",MGraph->vexs[i]);
  if (MGraph->vexs[i]==node1)     //查找这两个节点,找到后跳出循环
  break;
 }
 for(j=0;j<MGraph->vexnum;j++)
 if(MGraph->vexs[j]==node2)
  break;
 MGraph->arcs[i][j]=MGraph->arcs[j][i]=1;     //在邻接矩阵中储存该关系
}

ShowVexNum(struct Graph *MGraph)
{
 clrscr();
 printf("共有%d个节点",MGraph->vexnum);      //显示当前节点数
 getch();
}

ShowDepth(struct Graph *MGraph)
{
 int i,j,depth=0;
 char ch;
 clrscr();
 printf("请输入要检查的节点:");
 ch=getche();
 for(i=0;i<MGraph->vexnum;i++)        //查找该节点
 if(MGraph->vexs[i]==ch)
 break;
 for(j=0;j<MGraph->vexnum;j++)        //计算出该行有多少个1 ,是1则depth+1
 if(1==MGraph->arcs[i][j])
 depth++;
 printf("/n该节点的度为:%d",depth);
 getch();
}

Showarcs(struct Graph *MGraph)
{
 int i,j;
 for(i=0;i<MGraph->vexnum;i++)       //两个循环套用显示当前邻接矩阵的状态
 for(j=0;j<MGraph->vexnum;j++)
 {
  printf("%5d",MGraph->arcs[i][j]);
  if(j==MGraph->vexnum-1)
  printf("/n");
 }
 getch();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值