我的代码过不了,看了有题解和我写的差不多,我就把自己代码改成和这个一样的,但是就是过不了,这是哪里错了QAQ,大佬帮我看看,我查错能力差的一批
//my
#include <cstdio>
using namespace std;
const int N = 1e4 + 9, M = 5*1e5 + 9;
const int INF = 2147483647;
int n, m, s, dis[N];
int w[N],x[N],y[N], vis;
int main(){
scanf("%d%d%d",&n,&m,&s);
for(int i = 1; i <= m; i++) scanf("%d%d%d",&x[i], &y[i], &w[i]);
for(int i = 1; i <= n; i++) dis[i] = INF;
dis[s] = 0;
for(int i = 1; i < n; i++){
vis = 0;
for(int j = 1; j <= m; j++){
if(dis[y[j]] > dis[x[j]] + w[j]){
dis[y[j]] = dis[x[j]] + w[j];
vis = 1;
}
}
if(!vis) break;
}
for(int i = 1; i <= n; i++) printf("%d ", dis[i]);
return 0;
}
`` //其他大佬的 #include using namespace std; long long dis[10100]; int u[500100],v[500100],w[500100],n,m,s,check;//我们定义一个check,优化用 const int inf=2147483647; int main() { cin>>n>>m>>s;//输入 for(int i=1;i<=m;i++) cin>>u[i]>>v[i]>>w[i];//读入边 for(int i=1;i<=n;i++) dis[i]=inf;//dis数组初始化 dis[s]=0; for(int k=1;k<=n-1;k++) { check=0;//check归零 for(int i=1;i<=m;i++) { if(dis[v[i]]>dis[u[i]]+w[i]) { dis[v[i]]=dis[u[i]]+w[i]; check=1;//如果dis数值改变,check赋值为1 } } if(check==0) break;//如果没变,直接跳出循环,不要浪费时间 } for(int i=1;i<=n;i++) cout<<dis[i]<<" ";//输出 return 0; }