//有向图的创建,遍历,复制,查询
#include<stdio.h>
#include<windows.h>
#define MAX_VERTEX_NUM 10
typedef struct
{
int vexnum; //顶点个数
int A[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
}Grape;
//邻接矩阵初始化有向图
void Create_Grape(Grape &G)
{
char key='y';
printf("请输入顶点个数:");
scanf("%d",&G.vexnum);
//初始化邻接矩阵
for(int row=0;row<G.vexnum;row++)
{
for(int col=0;col<G.vexnum;col++)
G.A[row][col]=0;
}
while(key=='y')
{
int d1,d2;
printf("请输入起点:");
scanf("%d",&d1);
while(d1<0||d1>G.vexnum)
{
printf("输入有误,请重新输入:");
scanf("%d",&d1);
}
printf("请输入终点:");
scanf("%d",&d2);
while(d2<0||d2>G.vexnum)
{
printf("输入有误,请重新输入:");
scanf("%d",&d2);
}
G.A[d1][d2]=1;
printf("是否继续输入y/n: ");
char ch=getchar();
scanf("%c",&key);
}
}
//有向图邻接矩阵的显示
void print_grape(Grape &G)
{
printf(" ");
for(int j=0;j<G.vexnum;j++)
printf(" A%d",j);
printf("\n");
for(int row=0;row<G.vexnum;row++)
{
printf("A%d",row);
for(int col=0;col<G.vexnum;col++)
{
printf("%5d",G.A[row][col]);
}
printf("\n");
}
}
//有向图邻接矩阵的查找
void Search_grape(Grape &G)
{
int d1,d2;
printf("请输入您要查找的起点,终点:(空格分隔)");
scanf("%d %d",&d1,&d2);
if(G.A[d1][d2]==1)
printf("A%d-->A%d存在有向弧\n",d1,d2);
else
printf("A%d-->A%d不存在有向弧\n",d1,d2);
}
void Traverse_grape(Grape &G)
{
for(int row=0;row<G.vexnum;row++)
{
for(int col=0;col<G.vexnum;col++)
{
if(G.A[row][col]==1)
printf("A%d-->A%d存在有向弧\n",row,col);
}
}
}
//有向图邻接矩阵的复制
void Copy_grape(Grape G,Grape &W)
{
W.vexnum=G.vexnum;
for(int row=0;row<G.vexnum;row++)
{
for(int col=0;col<G.vexnum;col++)
W.A[row][col]=G.A[row][col];
}
printf("复制成功!\n");
}
void main()
{
system("color F4");
Grape G,W;
int temp;
char key='Y';
printf("1.创建 2.打印 3.查找 4.遍历 5.复制 0.退出;");
while(key=='Y')
{
printf("请选择您需要的功能:");
scanf("%d",&temp);
switch(temp)
{
case 1:
Create_Grape(G);
break;
case 2:
print_grape(G);
break;
case 3:
Search_grape(G);
break;
case 4:
Traverse_grape(G);
break;
case 5:
Copy_grape(G,W);
printf("复制所得的M如下: \n");
print_grape(W);
break;
case 0:
exit(0);
default:
break;
}
printf("是否继续输入Y/N: ");
char ch=getchar();
scanf("%c",&key);
}
}
图的实现
最新推荐文章于 2023-05-06 10:28:44 发布