邻接矩阵,邻接表

邻接矩阵:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstring>
 5 using namespace std;
 6 
 7 typedef char VertexType[4];
 8 typedef int VRtype;
 9 #define INF 100000
10 #define Max 20
11 
12 typedef struct     /*定点*/
13 {
14     VRtype adj;    /*权值*/
15 }ARCNode,AdjMatrix[Max][Max];
16 typedef struct     /*图类型*/
17 {
18     VertexType vex[Max];    /*储存定点*/
19     AdjMatrix arc;    /*邻接矩阵*/
20     int vexnum,arcnum;    /*定点,边数目*/
21 }Mgraph;
22 
23 void CreateGraph(Mgraph *N);
24 void Display(Mgraph N);
25 int Locate(Mgraph *N,char *v);
26 
27 int main()
28 {
29     Mgraph N;
30     CreateGraph(&N);
31     Display(N);
32 }
33 int Locate(Mgraph *N,char *v)
34 {
35     int i;
36     for(i=0;i<N->vexnum;i++)
37         if(strcmp(v,N->vex[i])==0)
38             return i;
39     return -1;
40 }
41 void CreateGraph(Mgraph *N)
42 {
43 
44     VertexType v1,v2;
45     VRtype w;
46     cout<<"输入定点,边数目"<<endl;
47     cin>>N->vexnum>>N->arcnum;
48     int i,j,k;
49     cout<<"输入定点名称"<<endl;
50     for(i=0;i<N->vexnum;i++)    /*输入定点名称*/
51         cin>>N->vex[i];
52     
53     for(i=0;i<N->vexnum;i++)    /*初始化*/
54     {
55         for(j=0;j<N->vexnum;j++)
56         {
57             N->arc[i][j].adj=INF;
58         }
59     }
60     cout<<"输入边权值"<<endl;
61     for(k=0;k<N->arcnum;k++)
62     {
63         cin>>v1>>v2>>w;
64         i=Locate(N,v1);
65         j=Locate(N,v2);
66         N->arc[i][j].adj=w;
67     }
68 }
69 void Display(Mgraph N)
70 {
71     int i,j,k;
72     for(i=0;i<N.vexnum;i++)
73     {
74         for(j=0;j<N.vexnum;j++)
75         {
76             cout<<N.arc[i][j].adj<<" ";
77         }
78         cout<<endl;
79     }
80 }

 2.邻接表

#include <iostream>
#include <cstring>
#include <vector>
using namespace std;
#define Max 20
int main()
{
    vector<int> G[Max];        /*有向图*/
    /*
    struct edge{int to;int cost;}    /*带权又向图*/
    int v,e;
    cin>>v>>e;
    int i,j,k;
    vector<int>::iterator it;
    for(i=0;i<e;i++)
    {
        int s,t;
        cin>>s>>t;
        G[s].push_back(t);
        G[t].push_back(s);
    }
    for(i=1;i<=v;i++)
    {
        for(it=G[i].begin();it!=G[i].end();it++)
            cout<<*it<<" ";
        cout<<endl;
    }

}

 

posted @ 2015-09-15 17:40  御心飞行  阅读(134)  评论(0编辑  收藏  举报