acwing搜索与图论(二)基础dijkstra算法


#include
#include
#include
using namespace std;
const int N=510;

int n,m;
int g[N][N];
int dist[N];
bool st[N];

int dijkstra(){
	memset(dist,0x3f,sizeof dist);
	dist[1]=0;
	for(int i=0;idist[j]))
				t=j;
		}
		st[t]=true;
		
		for(int j=1;j<=n;j++){
			dist[j]=min(dist[j],dist[t]+g[t][j]);
		}
		
	}
	
	if(dist[n]==0x3f3f3f3f)return -1;
	return dist[n];
	
	
}
int main(){
	scanf("%d%d",&n,&m);
	memset(g,0x3f,sizeof g);
	
	while(m--){
		 int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		g[a][b]=min(g[a][b],c);//可能存在重边
		
		
	}
	
	int t=dijkstra();
	printf("%d",t);
	return 0;
	
	
}

其中设t=-1,然后在条件中判断t==-1这个感觉挺好用的,尤其是因为第一个输入的数不能比较,所以给他赋初值,就可以先充当极值去比较,可以运用到别的题的输入中间。dijkstra算法不是很难就,就是acwing没有特别的注解,理解还是需要些时间的,贪心算法。

你可能感兴趣的:(算法,算法,图论,数据结构)