chenlh0711 @ 2024-02-19 11:45:40
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e6+10;
const int INF=(1<<31)-1;
struct node{
int w,u;
bool operator<(const node &x) const {
return w>x.w;
}
};
priority_queue<node> q;
struct Node{
int v,w,nxt;
}e[maxn];
int head[maxn],d[maxn],vis[maxn];
int n,m,s,tot;
void dijk(int s){
memset(d,0x3f,sizeof(d));
d[s]=0;
q.push((node){0,s});
while(!q.empty())
node x=q.top();
q.pop();
int t=x.u;
if(vis[t]==1) continue;
vis[t]=1;
for(int i=head[t];i!=-1;i=e[i].nxt){
int v=e[i].v;
if(vis[v]==0&&d[v]>d[t]+e[i].w){
d[v]+d[t]+e[i].w;
q.push((node){d[v],v});
}
}
}
void add(int x,int y,int w){
tot++;
e[tot].v=y,e[tot].w=w,e[tot].nxt=head[x];
head[x]=tot;
}
int main(){
memset (head,-1,sizeof(head));
cin>>n>>m>>s;
for(int i=1;i<=m;i++){
int x,y,w;
cin>>x>>y>>w;
add(x,y,w);
}
dijk(s);
for(int i=1;i<=n;i++){
if(d[i]!=0x3f3f3f3f)cout<<d[i]<<' ';
else cout<<INF<<' ';
}
return 0;
}
第24行显示x未定义
第25行显示continue 不在循环中
by lzm0107 @ 2024-02-19 22:39:52
21行后面加个{
,31行后面加个'}'
by qusia_MC @ 2024-02-28 20:13:17
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e6+10;
const int INF=(1<<31)-1;
struct node{
int w,u;
bool operator<(const node &x) const {
return w>x.w;
}
};
priority_queue<node> q;
struct Node{
int v,w,nxt;
}e[maxn];
int head[maxn],d[maxn],vis[maxn];
int n,m,s,tot;
void dijk(int s){
memset(d,0x3f,sizeof(d));
d[s]=0;
q.push((node){0,s});
while(!q.empty()){
node x=q.top();
q.pop();
int t=x.u;
if(vis[t]==1) continue;
vis[t]=1;
for(int i=head[t];i!=-1;i=e[i].nxt){
int v=e[i].v;
if(vis[v]==0&&d[v]>d[t]+e[i].w){
d[v]+d[t]+e[i].w;
q.push((node){d[v],v});
}
}
}
}
void add(int x,int y,int w){
tot++;
e[tot].v=y,e[tot].w=w,e[tot].nxt=head[x];
head[x]=tot;
}
int main(){
memset (head,-1,sizeof(head));
cin>>n>>m>>s;
for(int i=1;i<=m;i++){
int x,y,w;
cin>>x>>y>>w;
add(x,y,w);
}
dijk(s);
for(int i=1;i<=n;i++){
if(d[i]!=0x3f3f3f3f)cout<<d[i]<<' ';
else cout<<INF<<' ';
}
return 0;
}
dijk函数里的while循环循环体部分用大括号括起来。不过这会WA我也不会改,你这程序太“天书”了
by qusia_MC @ 2024-02-28 20:13:33
@chenlh0711