蒟蒻:为什么Floyed和未优化的Dij不给过?
查看原帖
蒟蒻:为什么Floyed和未优化的Dij不给过?
494471
g1306374356楼主2021/7/28 20:45

P3371P4779用这两种方法都没过(但测样例是没问题的)

下面附代码:

1.Floyed

#include<bits/stdc++.h>
using namespace std;

const int N=1010;
int n,m,s;
int d[N][N];
int x,y;

int main()
{
    memset(d,0x3f3f3f3f,sizeof(d));
    cin>>n>>m>>s;
    for(int i=1;i<=m;i++)
    {
        cin>>x>>y>>d[x][y];
        d[y][x]=d[x][y];
    }
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(i==j)d[i][j]=0,d[j][i]=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            for(int k=1;k<=n;k++)
                if(d[i][k]+d[k][j]<d[i][j])
                {
                    d[i][j]=d[i][k]+d[k][j];
                    d[j][i]=d[i][k]+d[k][j];
                }
    for(int i=1;i<=n;i++)cout<<d[s][i]<<" ";            
    return 0;
}

2.Dij

#include<iostream>
using namespace std;
const int maxn=101, inf=99999;
int v[maxn],a[maxn][maxn],d[maxn],path[maxn]; 
int n,m,start;
void init()
{
    cin>>n>>m>>start;
    int x,y,w;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
        {
            if(i==j) a[i][j]=0;
            else a[i][j]=inf;
        }
    for(int i=1;i<=m;i++)
    {
        cin>>x>>y>>w;
        a[x][y]=w;
        a[y][x]=w;
    }
}
void dijkstra(int s)
{
    for (int i=1;i<=n;i++) { d[i]=inf; v[i]=false; }
    d[s]=0;
    for (int i=1;i<=n;i++)
    {
        int mind=inf;
        int k; //用来记录准备放入集合1的点
        for (int j=1;j<=n;j++) //查找集合2中d[]最小的点
        if ( (!v[j]) &&(d[j]<mind) )
        { 
            mind=d[j]; 
            k=j; 
        }
        if (mind==inf) break; //更新结点求完了
        v[k]=true; // 加入集合1
        for (int j=1;j<=n;j++) //修改集合2中的d[j]
        if ((!v[j]) && (d[k]+a[k][j]<d[j]))
        { 
            d[j]=d[k]+a[k][j];
            path[j]=k;
        }
    }
}
void dfs(int i)
{
    if(i!=start) dfs(path[i]);
    //cout<<i<<' ';
}
void write()
{
    for (int i=1;i<=n;i++)
    //if(i!=start)
    {
        dfs(i);
        cout<<d[i]<<" ";
    }
}
int main()
{
    init();
    dijkstra(start);
    write();
    return 0;
}

顺便请dalao们看一下码有没有问题

2021/7/28 20:45
加载中...