时间限制:1000MS 代码长度限制:10KB
题型: 编程题 语言: G++;GCC
Description
实现有向图的邻接矩阵存储结构。
输入格式
第一行:输入图的顶点个数n(各个顶点的默认编号为1~n), 边的条数m。
第二 ~ m+1行:每行输入两个顶点编号i、j,表示连接顶点i到顶点j的一条边。
输出格式
分n行输出n*n的邻接矩阵,表示所输入的图存储,顶点i和顶点j之间如果有边相连,则输出1,没边相连则输出0。
输入样例
4 4
1 2
1 3
3 4
4 1
输出样例
0 1 1 0
0 0 0 0
0 0 0 1
1 0 0 0
步骤:
1.输入总顶点数和总边数
2.初始化邻接矩阵,权值置为0
3.构造邻接矩阵
代码如下:
#include <iostream>
using namespace std;
#define MVNum 100 //最大顶点数
typedef int ArcType;//边的权值类型
typedef struct
{
ArcType arcs[MVNum][MVNum];//邻接矩阵
int vexnum,arcnum;//点数和边数
}AMGraph;
void CreateUDN(AMGraph &G)
{//采用邻接矩阵表示法,创建有向网G
cin>>G.vexnum>>G.arcnum;
for(int i=0;i<G.vexnum;i++)
{
for(int j=0;j<G.vexnum;j++)//初始化邻接矩阵,初始值设为0
{
G.arcs[i][j]=0;
}
}
for(int k=0;k<G.arcnum;k++)
{//构造邻接矩阵
int v1,v2;
cin>>v1>>v2;//输入一条边依附的顶点
int i=v1-1,j=v2-1;//确定v1,v2在G中的位置,即顶点数组的下标
G.arcs[i][j]=1;//边<v1,v2>的权值改为1;
}
for(int i=0;i<G.vexnum;i++)//打印
{
for(int j=0;j<G.vexnum;j++)
printf("%d ",G.arcs[i][j]);
printf("\n");
}
}
int main()
{
AMGraph G;
CreateUDN(G);
return 0;
}