SPFA20分求助
查看原帖
SPFA20分求助
95626
charliegong楼主2021/10/8 23:06

两年以来第一回写【dijkstra万岁!】

好就没写了错的一塌糊涂。。

#include<iostream>
#include<cstring>
#include<algorithm>
#include<stdio.h>
#include<queue>
#define MAXN 100008
#define INF 0x3f3f3f3f
using namespace std;
struct node{
    int u,v,c;
}e[MAXN];
int h[MAXN],cnt;
void addEdge(int u,int v,int c){
    cnt++;
    e[cnt].v=v;e[cnt].c=c;e[cnt].u=h[u];h[u]=cnt;
}
int dis[MAXN],n,m;
bool vis[MAXN];
queue<int>q;
bool SPFA(int s){
	q.push(s);
	dis[s]=0;
	vis[s]=true;
	while(!q.empty()){
		int u=q.front();q.pop();
		vis[u]=false;
		for(int i=h[u];i;i=e[i].u){
			int v=e[i].v;
        	if(dis[v]>dis[u]+e[i].c){
                dis[v]=dis[u]+e[i].c;
                if(!vis[v]){
                    vis[v]=true;
                    q.push(v);
                }
            }
		}
	}
	return false;
}
void init(){
    memset(h,0,sizeof(h));
	memset(dis,0x3f3f3f3f,sizeof(dis));
	memset(vis,false,sizeof(vis));
    cnt=0;
}
int main()
{
	int i,j,T;
	scanf("%d",&T);
	while(T--){
		init();
		cin>>n>>m;
		for(int i=1;i<=m;i++){
			int u,v,c;
			cin>>u>>v>>c;
			addEdge(u,v,c);
			if(c>=0)addEdge(v,u,c);
		}
		if(SPFA(1)==true)cout<<"YES\n";
		else cout<<"NO\n";
	}
	return 0;
}

看了半天也没找到为啥死循环。

话说这死掉的算法CSP还会考吗

2021/10/8 23:06
加载中...