编程实现:以邻接矩阵的存储方式,创建一个有向图,顶点为字符型。
输入格式:
第一行输入顶点个数和边的个数,中间用空格分开。下一行开始依次输入顶点,空格或回车分开。接着依次输入边依附的两个顶点。
输出格式:
若数据合理,则输出对应的矩阵。若顶点个数为0,则输出"error"。若顶点个数为1,边个数不合理,则输出"error"。
输入样例:
在这里给出一组输入。例如:
4 4
a b c d
a b
a c
c d
d a
输出样例:
在这里给出相应的输出。例如:
0 1 1 0
0 0 0 0
0 0 0 1
1 0 0 0
#include<iostream>
using namespace std;
#define MVNum 100
typedef struct
{
char vexs[MVNum];
int arcs[MVNum][MVNum];
int vexnum,arcnum;
}AMGraph;
int LocateVex(AMGraph G,char v)
{
for(int i=0;i<G.vexnum;++i)
if(G.vexs[i]==v)return i;
return -1;
}
void Create(AMGraph &G,int &error)
{
cin>>G.vexnum>>G.arcnum;
for(int i=0;i<G.vexnum;++i) cin>>G.vexs[i];
for(int i=0;i<G.vexnum;++i)
for(int j=0;j<G.vexnum;++j) G.arcs[i][j]=0;
for(int k=0;k<G.arcnum;++k)
{ char v1,v2;
cin>>v1>>v2;
int i=LocateVex(G,v1),j=LocateVex(G,v2);
if(i==-1||j==-1) error=0;
else G.arcs[i][j]=1;
}
}
int main()
{
AMGraph G;
int error=1;
Create(G,error);
if(G.vexnum==0||(G.vexnum==1&&G.arcnum>1)||error==0)
cout<<"error";
else{
for(int i=0;i<G.vexnum;++i){
for(int j=0;j<G.vexnum;++j){
cout<<G.arcs[i][j];
if(j!=G.vexnum-1)cout<<" ";
else cout<<endl;
}
}
}
return 0;
}