AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

图的邻接矩阵&&邻接表表示及其相互转化

作者: 作者的头像   把头发掀起来看世界 ,  2024-11-02 17:02:34 ,  所有人可见 ,  阅读 2


0


#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
const int N=510,M=100010,INF=0x3f3f3f3f;

int n,m;
int g[N][N];

struct Node
{
    int id;//编号;
    int w;//权值;
    Node* next;
    Node(int id,int w):id(id),w(w),next(NULL){}
}*head[N];

void add(int a,int b,int w)
{
    Node* t=new Node(b,w);
    t->next=head[a];
    head[a]=t;
}

//邻接矩阵转邻接表
void convert1()
{
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(g[i][j]<INF/2)
            add(i,j,g[i][j]);
}

//邻接表转邻接矩阵
void convert2()
{
    for(int i=1;i<=n;i++)
    {
        for(Node*p=head[i];p;p=p->next)
        {
            int j=p->id;
            g[i][j]=g[j][i]=p->w;
        }
    }
}

//打印邻接矩阵
void print_A()
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            if(g[i][j]>INF/2)
                cout<<'-'<<' ';
            else cout<<g[i][j]<<' ';
        }
        cout<<endl;
    }
}

//打印邻接表
void print_link()
{
    for(int i=1;i<=n;i++)
    {
        for(auto p=head[i];p;p=p->next)
            printf("%d(%d) ",p->id,p->w);
        cout<<endl;
    }
}

int main()
{
    memset(g,0x3f,sizeof g);
    cin>>n>>m;


    while(m--)
    {
        int a,b,w;
        cin>>a>>b>>w;

        /*//1.邻接矩阵构建
        g[a][b]=g[b][a]=min(w,g[a][b]);*/

        //2.邻接表构建
        add(a,b,w);
        add(b,a,w);
    }

    /*puts("邻接矩阵表示法:");
    print_A();
    convert1();
    puts("邻接表表示法:");
    print_link();*/

    puts("邻接表表示法:");
    print_link();
    convert2();
    puts("邻接矩阵表示法:");
    print_A();

    return 0;
}

0 评论

App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息