码迷,mamicode.com
首页 > 编程语言 > 详细

C++图论算法——图的储存方式

时间:2021-03-08 13:49:48      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:str   using   技术   double   body   img   end   eof   维数   

使用二维数组邻接矩阵储存图

无向图:

技术图片图G

定义图G[101][101],G[i][j]的值表示从结点vi到vj是否有边或弧,若有,取值为1或权值,若无,则取值为0或∞。以下是图G用邻接矩阵表示的列表:

 

结点 A B C D
A 0 1 1 1
B 1 0 0 1
C 1 0 0 1
D 1 1 1 0

有向图:

技术图片图G(无权值)技术图片图G(有权值)

定义图G[101][101],G[i][j]的值表示从结点vi到vj是否有边或弧,若有,取值为1或权值,若无,则取值为0或∞。以下是图G用邻接矩阵表示的列表:

结点 A B C D
A 1 1
B
C 1
D 1
结点 A B C D
A 10 3
B
C 6
D 5
#include <iostream>
#include <cstring>
using namespace std;

double G[101][101];
int main(){
    int u,v,t,n,m;                        // 结点u到结点v的节点值为t
    cin >> n;
    for (int i = 1;i <= n;i++){
        for (int j = 1;j <= n;j++){
            G[i][j] = 0x7fffffff;        // 初始化为无穷大 
        }
    }
    // 或者使用memset(G,0x7fffffff,sizeof(G))来初始化
    /*
    若是int类型数组,则采用memset(G,0x7f,sizeof(G)))
    0x7fffffff表示无穷大,若是无向图,那么要写成memset(G,0,sizeof(G))
    也可以定义成memset(G,oxaf,sizeof(G)),全都定义成很小的数。 
    */
    cin >> m;
    for (int i = 1;i <= m;i++){
        cin >> u >> v >> t;
        G[u][v] = t;G[v][u] = t;        // 邻接矩阵的值 
    }
    // 输出
    for (int i = 1;i <= n;i++){
        for (int j = 1;j <= n;j++){
            cout << G[i][j] << " ";
        }
        cout << endl;
    } 
    return 0;
}

这是定义邻接矩阵的代码,大家可以根据需要查看注释修改代码。

C++图论算法——图的储存方式

标签:str   using   技术   double   body   img   end   eof   维数   

原文地址:https://www.cnblogs.com/linyiweiblog/p/14494231.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!