[专题训练2]最短路

算法:

Floyed算法(O(n^3))
Dijkstra (适合稠密图)
SPFA:优点是可以处理负权值,但是不能处理负环,使用前最好先判断是否有负环(适合稀疏图)(还不熟)*

会用到的存图方法:
邻接矩阵
邻接表
前向星 (待学)

进度:

在这里插入图片描述

1.MPI Maelstrom POJ1502 (无向图)
题目在此
一开始看错了题意,以为需要对所有dis求和,实际上只需要取最大值
stoi不能用,可以用atoi(char*转化成int)
代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<vector>
using namespace std;
const int MAX = 105;
const int inf = 0x3f3f3f;
int n,ans;
int dis[MAX];//表示从起点到i的最短距离
bool vis[MAX];
//vector<int> v[MAX];
int adj[MAX][MAX];
int x, mindis;
void init() {
	ans = 0;
	memset(vis, 0, sizeof(vis));
	memset(dis, inf, sizeof(dis));
	/*for (int i = 1; i < MAX; i++) {
		v[i].clear();
	}*/
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			adj[i][j] = inf;
		}
	}
	dis[1] = 0;
}
int main() {
	cin >> n;
	init();
	for (int i = 2; i <= n; i++) {
		char ss[10];
		int s;
		for (int j = 1; j <= i - 1; j++) {
			scanf("%s", ss);
			if (strcmp(ss,"x")!=0) {
				s = atoi(ss);
				adj[i][j] = adj[j][i] = s;
			}
		}
	}
	for (int i = 1; i <= n; i++) {
		x = -1;
		mindis = inf;
		for (int j = 1; j <= n; j++) {
			if (!vis[j] && dis[j] < mindis) {
				mindis = dis[j];
				x = j;
			}
		}
		vis[x] = 1;
		for (int j = 1; j <= n; j++) {
			if (!vis[j]) {
				dis[j] = min(dis[j], dis[x] + adj[x][j]);
			}
		}
	}
	for (int i = 1; i <= n; i++) {
		if (ans < dis[i])
			ans = dis[i];
	}
	cout << ans << endl;
	return 0;
}

2.Cow Contest POJ3660 (Floyed算法)
题目在此
看了一眼题解豁然开朗,用Floyed松弛
用memset只适合置0/-1/0x3f3f3f3f
代码:

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<cstdio>
#include<vector>
using namespace std;
const int MAX = 105;
const int INF = 0x3f3f3f;
int adj[MAX][MAX];
int main() {
	for (int i = 1; i < MAX; i++) {
		for (int j = 1; j < MAX; j++) {
			adj[i][j] = INF;
		}
	}
	int n, m;
	cin >> n >> m;
	for (int i = 1; i <= m; i++) {
		int a, b;
		cin >> a >> b;
		adj[a][b] = 1;//a比b强
		adj[b][a] = -1;//b比a弱
	}
	for (int j = 1; j <= n; j++) {
		for (int i = 1; i <= n;i++) {
			for (int k = 1; k <= n; k++) {
				if (adj[i][j] == adj[j][k] && (adj[i][j] == 1 || adj[i][j] == -1)) {//连赢或连输,可松弛
					adj[i][k] = adj[i][j];
				}
			}
		}
	}
	int ans = 0;
	for (int i = 1; i <= n; i++) {
		int sum = 0;
		for (int j = 1; j <= n; j++) {
			if (adj[i][j] != INF)
				sum++;
		}
		if (sum == n - 1)//和其他所有牛都能比较,他就赢了
			ans++;
	}
	cout << ans << endl;
	return 0;
}

3.Tram POJ1847
只要能看出是最短路就比较简单,不搬开关权值是0,搬开关权值是1

题目在此
代码:

#include<iostream>
#include<algorithm>
#include<string>
#include<cstring>
#include<cstdio>
#include<vector>
#include<queue>
using namespace std;
const int MAX = 105;
const int INF = 0x3f3f3f3f;
int adj[MAX][MAX],dis[MAX],ans,n;
bool vis[MAX];
int x, mindis,a,b;
struct node {
	int v,w;
};
vector<node> mp[MAX];
void init() {
	ans = 0;
	for (int i = 0; i < MAX; i++) {
		dis[i] = INF;
		vis[i] = 0;
	}
	dis[a] = 0;
	memset(adj, INF, sizeof(adj));
}
int main() {
	int num;
	cin >> n >> a >> b;
	init();
	for (int i = 1; i <= n; i++) {
		cin >> num;
		for (int j = 1; j <= num; j++) {
			int x;
			cin >> x;
			if (j == 1)
				adj[i][x] = 0;
			else
				adj[i][x] = 1;
		}
	}
	for (int i = 1; i <= n; i++) {
		x = -1;
		mindis = INF;
		for (int j = 1; j <= n; j++) {
			if (!vis[j] && mindis > dis[j]) {
				mindis = dis[j];
				x = j;
			}
		}
		vis[x] = 1;
		for (int j = 1; j <= n; j++) {
			if (!vis[j]) {
				dis[j] = min(dis[j], dis[x] + adj[x][j]);
			}
		}
	}
	if (dis[b] == INF)
		puts("-1");
	else
		cout << dis[b] << endl;
	return 0;
}

4.Silver Cow Party POJ3268
网址在此
代码:

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define MAX 1005
const int inf = 0x3f3f3f;
using namespace std;
int adj[MAX][MAX], dis[MAX], ret[MAX];
int a[MAX], b[MAX];
bool vis[MAX];
void init(int n,int x) {
	memset(vis, 0, sizeof(vis));
	for (int i = 1; i <= n; i++) {
		dis[i] = inf;
		ret[i] = inf;
	}
	dis[x] = 0;
	ret[x] = 0;
}
int main() {
	int n, m, x;
	cin >> n >> m >> x;
	init(n, x);
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			adj[i][j] = inf;
		}
	}
	//城镇数,路数,party城
	for (int i = 1; i <= m; i++) {
		int a, b, s;
		cin >> a >> b >> s;
		if (s < adj[a][b])
			adj[a][b] = s;
	}

	/*for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			cout << adj[i][j] << " ";
		}
		cout << endl;
	}
	cout << endl << endl;*/

	for (int i = 1; i <= n; i++) {
		int mindis = inf;
		int t = -1;
		for (int j = 1; j <= n; j++) {
			if (!vis[j] && dis[j] < mindis) {
				mindis = dis[j];
				t = j;
			}
		}
		vis[t] = 1;
		for(int j=1;j<=n;j++){//松弛
			if (!vis[j])
				dis[j] = min(dis[j],
					dis[t] + adj[t][j]);
		}
	}

	for (int i = 1; i <= n; i++) {
		a[i] = dis[i];
	}
	a[x] = 0;//a表示从x回来的距离
	//到此为止正过程结束


	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= i; j++) {
			swap(adj[i][j], adj[j][i]);
		}
	}
	init(n, x);

	/*for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			cout << adj[i][j] << " ";
		}
		cout << endl;
	}*/

	for (int i = 1; i <= n; i++) {
		int mindis = inf;
		int t = -1;
		for (int j = 1; j <= n; j++) {
			if (!vis[j] && dis[j] < mindis) {
				mindis = dis[j];
				t = j;
			}
		}
		vis[t] = 1;
		for (int j = 1; j <= n; j++) {//松弛
			if (!vis[j])
				dis[j] = min(dis[j],
					dis[t] + adj[t][j]);
		}
	}
	for (int i = 1; i <= n; i++) {
		b[i] = dis[i];
	}
	b[x] = 0;
	
	int ans = 0;
	for (int i = 1; i <= n; i++) {
		ans = max(ans, a[i] + b[i]);
	}
	cout << ans << endl;
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值