Literally114514 @ 2023-10-03 23:53:03
本来自己写的还对只是超时,现在照着题解打优化版都是错的,家人们谁懂啊恶心死了啊啊啊
。。。。。。
#include <iostream>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
int n,m,u,v,w,distant,ver,cnt=0,p;//cnt=编号
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
struct node{
int to;
int w;
int next;
};
int dist[100010];
bool used[100010];
node edge[100010];
int head[100010];
void add_edge(int u,int v,int w){
edge[cnt].to=v;
edge[cnt].w=w;
edge[cnt].next=head[u];
head[u]=cnt;
cnt++;
}
int main(){
cin>>n>>m>>p;
for(int i=1;i<=m;i++){
cin>>u>>v>>w;
add_edge(u,v,w);
//distant=first,end=second
}
memset(dist,0x3f,sizeof(dist));
dist[1]=0;
q.push({0,1});
while(q.size()){
auto k=q.top();
q.pop();
distant=k.first;
ver=k.second;
if(used[ver]) continue;
used[ver]=1;
for(int i=head[ver];i!=0;i=edge[i].next){
int j=edge[i].to;
if(edge[i].w+distant < dist[j]){
dist[j]=edge[i].w+distant;
q.push({dist[j],j});
}
}
}
for(int i=1;i<=n;i++) cout<<dist[i]<<' ';
}
by DANNNqwq @ 2023-10-03 23:55:59
是从s出发而不是从1出发
by Literally114514 @ 2023-10-03 23:57:56
@DANNNsth 题目中说s就是1
by 洛天依_ @ 2023-10-03 23:58:11
讯飞星火说: 这段代码存在一个问题:
在add_edge函数中,将新边添加到邻接表中时,没有正确初始化next指针。这导致在后续遍历邻接表时,可能会出现未定义的行为。
为了修复这个问题,我们需要在add_edge函数中为每个新边分配一个空的next指针。修改后的代码如下所示:
void add_edge(int u, int v, int w) {
edge[cnt].to = v;
edge[cnt].w = w;
edge[cnt].next = head[u]; // Initialize next pointer to NULL
head[u] = cnt++;
}
这样,在后续遍历邻接表时,就能正确地通过next指针访问到各个出边,并计算最短路径了。
by DANNNqwq @ 2023-10-04 00:00:07
@Literally 题目什么时候说s=1了???
by Literally114514 @ 2023-10-04 00:01:38
@DANNNsth 看说明/提示。。。。。
by Literally114514 @ 2023-10-04 00:02:49
@洛天依_ 讯飞大聪明啊,就加了一注释。。。。。。。。。。。。。。。。
by DANNNqwq @ 2023-10-04 00:03:55
@Literally edge结构体开小了
by lwyzhx @ 2023-10-04 00:04:22
1)数组开小了
2)
void add_edge(int u,int v,int w){
edge[cnt].to=v;
edge[cnt].w=w;
edge[cnt].next=head[u];
head[u]=cnt;
cnt++;
}
更改为
void add_edge(int u,int v,int w){
edge[++cnt].to=v;
edge[cnt].w=w;
edge[cnt].next=head[u];
head[u]=cnt;
}
by DANNNqwq @ 2023-10-04 00:05:20
@Literally add函数应该先++cnt在建边
by Literally114514 @ 2023-10-04 00:14:19
@DANNNsth thx @blue_wine thx