Floyd0分求助
查看原帖
Floyd0分求助
661595
a2lyaXNhbWUgbWFyaXNh楼主2022/10/18 10:34

似乎只有一个点的输出不是-1

#include<bits/stdc++.h>
using namespace std;
int floyd[110][110],cont[110],fuck[110][110];
int n,k,m,s,t,u,v,d;
int main(){
    scanf("%d%d%d%d%d",&n,&k,&m,&s,&t);
    for(int i=1;i<=n;++i)
        for(int j=1;j<=n;++j)
            floyd[i][j]=2147483646;
    for(int i=1;i<=n;++i)
        scanf("%d",&cont[i]);
    for(int i=1;i<=k;++i)
        for(int j=1;j<=k;++j)
            scanf("%d",&fuck[i][j]);
    for(int i=1;i<=m;++i) {
        scanf("%d%d%d",&u,&v,&d);
        if(d<floyd[u][v]){
            if(fuck[cont[u]][cont[v]]==0)floyd[u][v]=d;
            if(fuck[cont[v]][cont[u]]==0)floyd[v][u]=d;
        }
    }  
    for(int k=1;k<=n;++k)
        for(int i=1;i<=n;++i)  
            for(int j=1;j<=n;j++)
                floyd[i][j]=min(floyd[i][j],floyd[i][k]+floyd[k][j]);
    if(floyd[s][t]==2147483646)
        printf("-1");
    else    
        printf("%d",floyd[s][t]);            
    return 0;
}
2022/10/18 10:34
加载中...