元素位置建边

本文介绍了一种使用C++实现的迪杰斯特拉算法,用于寻找带权重的图中从一个顶点到所有其他顶点的最短路径。通过`add`函数构建边并维护邻接表结构,`djstra`函数演示了如何应用该算法求解最小生成树问题。最后,展示了如何计算最少的交换次数。
摘要由CSDN通过智能技术生成

b774c1c7fa5d4ba99e0b932b683a5354.png

 #include<iostream>

#include<cstring>

#include<algorithm>

using namespace std;

const int N=100010;

int n;

int h[N],e[N],ne[N],idx;

bool st[N];

int map[N],kk=2;

void add(int a,int b)

{

    e[idx]=b;ne[idx]=h[a];h[a]=idx++;

}

void djstra()

{

    int add=1;

    st[1]=true;

    int t=1;

    cout << 1 <<' ';

    map[1]=1;

    while(t)

    {

       for(int i=h[t];i!=-1;i=ne[i])

       {

           if(!st[e[i]])

           {

               cout << e[i] << ' ';

               add++;

               st[e[i]]=true;

               t=e[i];

               map[kk++]=t;

               break;

           }

           t=0;

       }        

    }

    cout << endl;

    if(add!=n) cout << -1;

    else{

        int sum=0;

        //求最少换几次

        cout << sum;

    }

}

int main()

{

    cin >> n;

    memset(h, -1, sizeof h);

    for(int i=1;i<=n;i++)

    {

        int a,b;

        cin >> a >> b;

        add(i,a);add(i,b);

    }

    djstra();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值