图——建图

方法一:邻接矩阵建图

#include<bits/stdc++.h>
#define Max 100
using namespace std;
struct node{
int v;//顶点数
int e;//边数
int G[Max][Max];
int Data[Max];//存顶点的数据
};
struct Enode{
int v1,v2;//有向边
int w;//权重
};
node *creat(int V);//初始化一个有顶点无边的图
void In(node *p,Enode *E);//向node中插入边
int main()
{
    int v,e;
    node *p;
    cin>>v;
    p=creat(v);
    cin>>p->e;
    if(p->e!=0)
    {
        Enode *E=(Enode*)malloc(sizeof(Enode));
        for(int i=0;i<p->e;i++)
        {
            cin>>E->v1>>E->v2>>E->w;
            In(p,E);
        }
    }
    //如果顶点有数据的话读入数据
    for(int i=0;i<v;i++)
    cin>>p->Data[i];
    for(int i=0;i<p->v;i++)
    {
    for(int j=0;j<p->v;j++)
    cout<<i<<"->"<<j<<"的权重   "<<p->G[i][j]<<"  ";
    cout<<endl;
    }
    for(int i=0;i<p->v;i++)
        cout<<"顶点"<<i<<"的数据  "<<p->Data[i]<<endl;

    return 0;
}
node *creat(int V)
{
    node *p=(node*)malloc(sizeof(node));
    p->v=V;
    p->e=0;
    for(int i=0;i<p->v;i++)
    for(int j=0;j<p->v;j++)
    {
        p->G[i][j]=0;
    }
    return p;
}
void In(node *p,Enode *E)
{
    p->G[E->v1][E->v2]=E->w;
    p->G[E->v2][E->v1]=E->w;
}

方法二 :邻接矩阵的简写版

#include<bits/stdc++.h>
#define Max 100
using namespace std;
int G[Max][Max];
int main()
{
    int v;
    cin>>v;
    for(int i=0;i<v;i++)
    for(int j=0;j<v;j++)
    {
        G[i][j]=0;
    }
    int e;
    cin>>e;
    int v1,v2,w;
    for(int i=0;i<e;i++)
    {
        cin>>v1>>v2>>w;
        G[v1][v2]=w;
        G[v2][v2]=w;
    }
    return 0;
}

方法三:邻接表建图


猜你喜欢

转载自blog.csdn.net/wchenchen0/article/details/80293256