首页 > 其他分享 >最短路

最短路

时间:2022-12-27 14:55:05浏览次数:42  
标签:head cout int 短路 cnt Next void

T1P5318 【深基18.例3】查找文献

dfs和bfs用set存方便排序

#include<bits/stdc++.h>
using namespace std;
set<int>a[1000020];
int v[1000020];
int n , m;
void dfs(int x){
	if(v[x])return;
	v[x] = 1;
	cout << x << " ";
	for(int y : a[x]){
		dfs(y);
	}
}
queue<int>q;
void bfs(){
	q.push(1);
	while(!q.empty()){
		int x = q.front();
		q.pop();
		if(v[x])continue;
		v[x] = 1;
		cout << x << " "; 
		for(int y : a[x]){
			q.push(y);
		} 
	}
}
int main () {
	cin >> n >> m ;
	for(int i = 1; i <= m ; i ++){
		int x , y;
		cin >> x >> y;
		
		a[x].insert(y);
	}
	dfs(1);
	cout << endl;
	memset(v , 0 , sizeof v);
	bfs();
}

P3371 【模板】单源最短路径(弱化版)

Floyd模板题

#include<bits/stdc++.h>
using namespace std;
int n ,  m ,  s;
int f[5000][5000];
int main () {
	cin >> n >> m >> s;
	for(int i = 1 ; i <= 1001 ; i ++){
		for(int j = 1 ; j <= 1001 ; j ++){
			f[i][j] = 1000200;
		}
	}
	for(int i = 1 ; i <= m ; i ++){
		int u , v , w ;
		cin >> u >> v >> w;
		f[u][v] = min(f[u][v] , w);
	}
	  f[s][s] = 0;
	  for(int k = 1 ; k <= n ; k ++){
	  	for(int i = 1; i <= n ; i ++){
	  		for(int j = 1; j <= n ;j ++){
	  			f[i][j] = min(f[i][j] , f[i][k] + f[k][j]);
			  }
		  }
	  }
	  for(int i = 1; i <= n ; i ++){
	  	if(f[s][i] == 1000200)cout << "2147483647" << " ";
		else cout << f[s][i] << " "; 
	  }
} 

P4779 【模板】单源最短路径(标准版)

堆优化的dijkstra

#include<bits/stdc++.h>
using namespace std ;
int n , m , s;
const int N = 100020;
int head[N] , Next[N] , cnt , edge[N] , ver[N];
int tot ;
void add(int x, int y ,int w){
	ver[++cnt] = y;
	edge[cnt] = w;
	Next[cnt] = head[x];
	head[x] = cnt ;
}
int d[N] ;
priority_queue<pair<int , int > > q;
int v[N];
void diji(){
	memset(d , 0x3f , sizeof(d) ) ;
	d[s] = 0;
	q.push(make_pair(-d[s] , s));
	while(!q.empty()){
		int x = q.top().second ;
		q.pop() ;
		if(v[x])continue ;
		v[x] = 1;
		for(int i = head[x] ; i ; i = Next[i]){
			int y = ver[i] , z = edge[i];
			if(d[y] > d[x] + z){
				d[y] = d[x] + z ;
				q.push(make_pair(-d[y] , y));
			}
		} 
	}
}  
int main () {
	cin >> n >> m >> s;
	for(int i = 1; i <= m ;i ++){
		int u , v , w;
		cin >> u >> v >> w;
		add(u , v , w);
	}
	diji();
	for(int i = 1; i <= n ; i ++){
		cout << d[i] << " ";
	}
}

标签:head,cout,int,短路,cnt,Next,void
From: https://www.cnblogs.com/wmjlzw1314/p/17008070.html

相关文章

  • BFS场景样例测试--最短路径--用Java实现
    我们今天研究下最短路径用BFS来实现 首先确定数据结构/***二叉树数据结构节点*/publicclassTreeNode{intvalue;TreeNodeleft;TreeNoder......
  • python中使用马尔可夫决策过程(MDP)动态编程来解决最短路径强化学习问题|附代码数据
    最近我们被客户要求撰写关于MDP的研究报告,包括一些图形和统计输出。在强化学习中,我们有兴趣确定一种最大化获取奖励的策略。假设环境是马尔可夫决策过程(MDP)的理想模型,我们......
  • 【SEERC2022】 K.Knowledge Testing Problem 【整体二分】【最短路】
    分析:注意到$|u-v|<=10$,所以可以将询问的最短路分类为,左边的最短路,跨越左右的最短路,右边的最短路。套整体二分的板子就行。以前应该做过代码:#include<bits/stdc++.h>usi......
  • AcWing1134/洛谷P1144 最短路计数
    AcWing传送门洛谷传送门题目大意\(\qquad\)给一个无向图,边权都是\(1\),求出以\(1\)为源点,到各个点(\(1\simn\))的最短路数量解题思路\(\qquad\)边权都是\(1\)的图中最......
  • 迪杰斯特拉方法实现最短路径
    用迪杰斯特拉算法实现有向网的最短路径输入格式:第一行输入有向网的顶点和边数,第二行输入各顶点值,用空格间隔,第三行开始输入各条边的两个点的及边上的权值,用空格间隔。......
  • 迪杰斯特拉方法实现最短路径
    用迪杰斯特拉算法实现有向网的最短路径输入格式:第一行输入有向网的顶点和边数,第二行输入各顶点值,用空格间隔,第三行开始输入各条边的两个点的及边上的权值,用空格间隔。......
  • python中使用马尔可夫决策过程(MDP)动态编程来解决最短路径强化学习问题|附代码数据
    原文链接:http://tecdat.cn/?p=11105最近我们被客户要求撰写关于MDP的研究报告,包括一些图形和统计输出。在强化学习中,我们有兴趣确定一种最大化获取奖励的策略。假设环境......
  • 短路运算
    逻辑与&&的运算如果两边都为数字,或字符串数字,则返回右边的如果左边的值为【true】,不管右边的值是(真)是(假)都返回右边的如果左边的值为【false】,则都返回左边的,那......
  • [ARC044B] 最短路問題
    [ARC044B]最短路問題难度:\(1744\)标签:最短路,记数\(\mathtt{blog}\)有一个\(n\)个点的无向图,\(1\)点为起点,现在告诉你\(1\simn\)点到\(1\)点的最短距离,每条边......
  • dijkstra最短路代码模板更新
     fromcollectionsimportdefaultdictfromheapqimportheappush,heappopdefdijkstra(edges,start_node,end_node):graph=defaultdict(dict)f......