7-1 邻接矩阵存储创建有向图

编程实现:以邻接矩阵的存储方式,创建一个有向图,顶点为字符型。

输入格式:

第一行输入顶点个数和边的个数,中间用空格分开。下一行开始依次输入顶点,空格或回车分开。接着依次输入边依附的两个顶点。

输出格式:

若数据合理,则输出对应的矩阵。若顶点个数为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<cstdio>
using namespace std;
const int N=1010;
struct {
    int n,m;
    char vers[N];
    bool arcs[N][N];
}gra;
int find(char c){
    for(int i=0;i<gra.n;i++){
        if(gra.vers[i]==c){
            return i;
        }
    }
    return -1;
}
void add(char x,char y){
    int u=find(x),v=find(y);
    if(~u&&~v){
        gra.arcs[u][v]=1;
    }
    else{
        cout<<"error";
        exit(0);
    }
}
int main(){
    cin>>gra.n>>gra.m;
    if(gra.n==0||gra.n==1&&gra.m>1){
        cout<<"error";
        return 0;
    }
    for(int i=0;i<gra.n;i++){
        cin>>gra.vers[i];
    }
    for(int i=0;i<gra.m;i++){
        char u,v;
        cin>>u>>v;
        add(u,v);
    }
    for(int i=0;i<gra.n;i++){
        for(int j=0;j<gra.n;j++){
            if(j) cout<<' ';
            cout<<gra.arcs[i][j];
        }
        if(i!=gra.n-1) cout<<endl;
    }
    return 0;
}

  

posted @ 2021-12-08 23:16  好(justice)……  阅读(244)  评论(0编辑  收藏  举报