为什么会wrong 这题为什么没有数据下载
查看原帖
为什么会wrong 这题为什么没有数据下载
265128
xiaojiewuxianzhuai楼主2020/9/9 15:08

求大佬指点一下spfa

#include<iostream>
#include <list>
#include<cstring>
using namespace std;
int n,m;
#define maxn 100009
struct head
{
    int next;
    int last;
    head():next(-1),last(-1){}
};
head had[maxn];
struct edge
{
    int next;
    int to;
    int cost;
    edge():next(-1){}
};
edge ed[2*maxn];
void create(int sta,int end ,int cost ,int index)
{
    if(had[sta].next==-1)
    {
        had[sta].next=index;
        ed[index].cost=cost;
        ed[index].to=end;
        had[sta].last=index;
    }
    else
    {
        int in=had[sta].last;
        ed[in].next=index;
        ed[index].cost=cost;
        ed[index].to=end;
        had[sta].last=index;
    }

    
}
int ans[maxn];
int vis[maxn]={0};

void SPFA(int start)
{
    for(int i=1;i<=n;i++)
    ans[i]=-1;
    list<int> li;
    ans[start]=0;
    li.push_back(start);
    vis[start]=1;
    while (!li.empty())
    {
        int s=li.front();
        vis[start]=0;
        li.pop_front();
        for(int i=had[s].next;i!=-1;i=ed[i].next)
        {
            int end=ed[i].to;
            if(ans[end]==-1||ans[end]>ans[s]+ed[i].cost)
            {
                ans[end]=ans[s]+ed[i].cost;
                if(vis[end]==0)
                {
                    vis[end]=1;
                    li.push_back(end);
                }
            }
        }
    }
    
}
int main()
{
    int s;
    cin>>n>>m>>s;
    int sta,end,cost;
    for(int i=0;i<m;i++)
    {
        cin>>sta>>end>>cost;
        create(sta,end,cost,i);
    }
    SPFA(s);
    for(int i=1;i<=n;i++)
    cout<<ans[i]<<" ";
    
}

2020/9/9 15:08
加载中...