社区讨论

dijstra是怎么死的呀...求dalao帮看看...orz...

P1629邮递员送信参与者 5已保存回复 5

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
5 条
当前快照
1 份
快照标识符
@mi6zn8ru
此快照首次捕获于
2025/11/20 13:26
4 个月前
此快照最后确认于
2025/11/20 13:26
4 个月前
查看原帖
CPP
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
const int MAXN=1001;
typedef pair<int,int> pr;
priority_queue<pr,vector<pr>,greater<pr> >q;
int dist[MAXN];
bool vist[MAXN];
vector<int>G[MAXN];
vector<int>val[MAXN];
int n,m,ans=0;
void dijstra(int s)
{
    int u,w;
    for(int i=1;i<=n;i++)
        dist[i]=999999;
    dist[s]=0;
    q.push(make_pair(0,s));
    while(!q.empty())
    {
        u=q.top().second;
        w=q.top().first;
        q.pop();
        if(vist[u])
            continue;
        vist[u]=true;
        for(unsigned int i=0;i<G[u].size();i++)
        {
            int v=G[u][i];
            int h=val[u][i];
            if(!vist[v]&&dist[v]>w+h)
            {
                dist[v]=w+h;
                q.push(make_pair(dist[v],v));
            }
        }
    }
}
int main()
{
//	freopen("text.in","r",stdin);
//	freopen("text.out","w",stdout);
    scanf("%d %d\n",&n,&m);
    for(int i=1;i<=m;i++)
    {
        int x,y,w;
        scanf("%d %d %d\n",&x,&y,&w);
        G[x].push_back(y);
        val[x].push_back(w);
    }
    dijstra(1);
    for(int i=1;i<=n;i++)
        ans+=dist[i];
    for(int i=2;i<=n;i++)
    {
        memset(vist,false,sizeof(vist));
        dijstra(i);
        ans+=dist[1];
    }
    printf("%d",ans);
    return 0;
 } 

回复

5 条回复,欢迎继续交流。

正在加载回复...