邻接矩阵 - 无向图

  • 1,创建图(用已提供的数据)
#include<iostream>
using namespace std;

#define len 100

class Graph{
    public:
        char node[len];     // 顶点集合
        int edge[len][len]; // 邻接矩阵 
        int n;              // 节点个数 
        int e;              // 边的个数
        int visited[len];   // 用来得知该节点是否被访问

        Graph(){
            n = 7;
            e = 7;

            // 设置节点为默认数值
            string nodes = "ABCDEFG";
            // 输入节点
            for(int i=0; i < n; i++){
                node[i] = nodes[i];
            }

            // 设置边为默认值
            char edges[][2] = {
                {'A', 'C'},
                {'A', 'D'},
                {'A', 'F'},
                {'C', 'B'},
                {'C', 'D'},
                {'F', 'G'},
                {'G', 'E'}
            };
            // 边初始化为0
            for(int i=0; i < n; i++){
                for(int j=0; j < n; j++){
                    edge[i][j] = 0;
                }
            }
            for(int i=0; i < e; i++){
                int start = get_Node_Index(edges[i][0]);
                int end = get_Node_Index(edges[i][1]);
                // 无向图的建立
                edge[start][end] = 1;
                edge[end][start] = 1; 
            }

            // 初始化 visited 数组
            for(int i=0; i < n; i++){
                visited[i] = 0;
            }
        }

        // 返回顶点下标
        int get_Node_Index(char number){
            for(int i=0; i < n; i++){
                if(number == node[i]){
                    return i;
                }
            }
            return -1; //这句话永远不会执行的
        }
};

int main(){
    Graph g;

    cout<<"  ";
    for(int i=0; i < g.n; i++){
        cout<<g.node[i]<<" ";
    }
    cout<<endl;

    for(int i=0; i < g.n; i ++){
        cout<<g.node[i]<<" ";
        for(int j=0; j < g.n; j++){
            cout<<g.edge[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<endl;
    return 0;
}
  • 2,创建图(用户在终端输入数据)
#include<iostream>
using namespace std;

#define len 100

class Graph{
    public:
        char node[len];     // 顶点集合
        int edge[len][len]; // 邻接矩阵 
        int n;              // 节点个数 
        int e;              // 边的个数
        int visited[len];   // 用来得知该节点是否被访问

        Graph(){
            // 输入节点个数
            cout<<"输入节点数目: ";
            cin>>n;

            // 输入边的个数
            cout<<"输入边的数目: ";
            cin>>e;

            // 输入节点
            for(int i=0 ; i < n; i++){
                cout<<"请输入第 "<<i+1<<" 个节点: ";
                cin>>node[i];
            }

            // 边初始化为0
            for(int i=0; i < n; i++){
                for(int j=0; j < n; j++){
                    edge[i][j] = 0;
                }
            }

            // 输入边
            char t1, t2;
            for(int i=0; i < e; i++){
                cout<<"请输入第 "<<i+1<<" 条边起点: ";
                cin>>t1;
                cout<<"请输入第 "<<i+1<<" 条边终点: ";
                cin>>t2;

                int start = get_Node_Index(t1);
                int end = get_Node_Index(t2);
                edge[start][end] = 1;
                edge[end][start] = 1;
            }

            // 初始化 visited 数组
            for(int i=0; i < n; i++){
                visited[i] = 0;
            }
        }

        // 返回顶点下标
        int get_Node_Index(char number){
            for(int i=0; i < n; i++){
                if(number == node[i]){
                    return i;
                }
            }
            return -1; //这句话永远不会执行的
        }
};

int main(){
    Graph g;

    cout<<"  ";
    for(int i=0; i < g.n; i++){
        cout<<g.node[i]<<" ";
    }
    cout<<endl;

    for(int i=0; i < g.n; i ++){
        cout<<g.node[i]<<" ";
        for(int j=0; j < g.n; j++){
            cout<<g.edge[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<endl;
    return 0;
}

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容