图——邻接矩阵法创建无向网算法(冲鸭。。)

一、算法步骤:

1、先把图的总顶点数和总边数输入进去。
2、输入每个顶点具体信息。
3、初始化领接矩阵的值为最大值。
4、构造邻接矩阵即输入每条边依附的两个顶点和相应的权值。
5、把该权值加入到相应的邻接矩阵中去。同时对称边也赋予相同的权值。

二、相关步骤代码实现:

1、头文件:

#include<iostream>
#define MaxInt 32736
#define MVNum 100
#define OK 1
using namespace std;

2、定义一个网的结构体:

typedef struct{
    char vexs[MVNum];//顶点数组
    int arcs[MVNum][MVNum];//邻接矩阵数组
    int vexnum,arcnum;//图的总顶点数和总边数
}AMGraph;

3、找到每条边依附顶点的位置:

int LocateChar(AMGraph G,char v){
    for(int i=0;i<G.vexnum;i++){
        if(G.vexs[i]==v)
           return i;
    }
}

4、初始、构造邻接矩阵:

void CreateUDN(AMGraph &G){
    cout<<"请输入所创建图的总顶点数和总边数:"<<endl;
    cin>>G.vexnum>>G.arcnum;
    //输入每个顶点的信息
    for(int i=0;i<G.vexnum;i++){
        cout<<"请输入第"<<(i+1)<<"个顶点的信息:"<<endl;
        cin>>G.vexs[i];
    }
    //初始化邻接矩阵
    for(int i=0;i<G.vexnum;i++){
        for(int j=0;j<G.vexnum;j++)
            G.arcs[i][j]=MaxInt;
    }
    //构造邻接矩阵
    for(int k=0;k<G.arcnum;k++){
        char v1,v2;
        int v3;
        cout<<"请输入第"<<(k+1)<<"条边依附的顶点和去权值:"<<endl;
        cin>>v1>>v2>>v3;
        //找到顶点的相应位置
        int i = LocateChar(G,v1);
        int j = LocateChar(G,v2);
        G.arcs[i][j]=v3;
        G.arcs[j][i]=v3;    //置<v1, v2>的对称边<v2, v1>的权值为w
    }
}

5、主函数:

int main(){
    AMGraph G;
    CreateUDN(G);
    cout<<"您用邻接矩阵构造的无向网如下:"<<endl;
    for(int i=0;i<G.vexnum;i++){
        for(int j=0;j<G.vexnum;j++){
            if(j!=G.vexnum-1){  //横向输出邻接矩阵中的元素
                if(G.arcs[i][j]==MaxInt){
                cout<<"∞"<<"\t";
                }else
                cout<<G.arcs[i][j]<<"\t";
            }else{
                if(G.arcs[i][j]==MaxInt){
                cout<<"∞"<<endl;
                }else
                cout<<G.arcs[i][j]<<endl;
            }
        }
    }
}

三、结果截图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值