邻接矩阵的创建

#include<bits/stdc++.h>
using namespace std;

//邻接矩阵的输入以及输出
/*
输入格式如下:
    首先是顶点数和边数
    然后是顶点的值(数据类型为string)
    然后是边数行,分别输入边的两个顶点名称以及其权值
    
示例如下:    
6 6
p1 p2 p3 p4 p5 p6
p1 p2 5
p2 p4 10
p1 p3 7
p5 p1 12
p4 p5 9
p4 p3 2
*/

#define MAX_NUM 114514       //寓意:逸一时,误一世!

typedef string VerticesType;//顶点数据的类型

typedef struct AdjacentMatrix{
    int vexnum,arcnum;//顶点数和边数
    VerticesType Vertices[100];//顶点
    int Edge[100][100];//邻接矩阵
}AMGraph;
void create_AMGraph(AMGraph &G){
    VerticesType x,y;
    int x1,y1;
    cin>>G.vexnum>>G.arcnum;//输入顶点数和边数
    for(int i=0;i<G.vexnum;++i){
        cin>>G.Vertices[i];
    }
    for(int i=0;i<G.vexnum;++i){
        for(int j=0;j<G.vexnum;++j){
            G.Edge[i][j]=MAX_NUM;//先给邻接矩阵赋初值
        }
    }
    for(int i=0;i<G.arcnum;++i){
        //如果直接输入顶点的名称,还需要找到这两个顶点的下标
        cin>>x>>y;//输入要赋权的边的位置
        for(int j=0;j<G.vexnum;++j){//采用了最简单但最慢的方法,遍历
            //主要我觉得边数上限也才设置为了100,再循环一遍也问题不大
            if(G.Vertices[j]==x){
                x1=j;
            }
            else if(G.Vertices[j]==y){
                y1=j;
            }
        }
        cin>>G.Edge[x1][y1];
    }
}
void push_AMGraph(AMGraph &G){//打印一遍邻接矩阵检查
    for(int i=0;i<G.vexnum;++i){
            cout<<G.Vertices[i]<<" ";}
    cout<<endl;
    for(int i=0;i<G.vexnum;++i){
        for(int j=0;j<G.vexnum;++j){
            cout<<fixed<<setw(6)<<G.Edge[i][j]<<" ";//为了美观,左边补上空格
        }
        cout<<endl;
    }
}
int main(){
    AMGraph tu;
    create_AMGraph(tu);
    push_AMGraph(tu);
    return 0;
}

主要参考:严蔚敏的《数据结构》。说实话我还是看不太懂。

只不过呢,现在都大二下了,大一下的数据结构还是一窍不通(认真),今天晚上花了一个多小时才写完以上这段,实在是服了我自己了。

这几天真的太焦虑了,哎呀呀,真是无可奈何呢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值