Codevs 1079 回家 最短路 spfa || dijkstra
来源:互联网 发布:mysql是大型数据库吗 编辑:程序博客网 时间:2024/04/30 08:06
Codevs 1079 回家 最短路
直接利用 ASCII 码把字母转化为顶点跑最短路就可以了,
如果嫌我的方法浪费了部分空间 可以令 把所有的 ASCII 都-‘A’;
spfa
#include <iostream>#include <cstdio>#include <queue>#include <cstring>#define MAX_V 200#define MAX_E (10000+10)using namespace std;int E, tot = 0;int first[MAX_V], nxt[MAX_E << 1], dis[MAX_V];bool used[MAX_V];struct edge{ int from, to, cost;}es[MAX_E << 1];void build(int ff, int tt, int dd){ es[++tot] = (edge){ff,tt,dd}; nxt[tot] = first[ff]; first[ff] = tot;}queue <int> q;void spfa(int s){ memset(dis,63,sizeof(dis)); dis[s] = 0; q.push(s); used[s] = 1; while(q.size()) { int x = q.front(); q.pop(); used[x] = 0; for(int i = first[x]; i != -1; i = nxt[i]) { int v = es[i].to; if(dis[v] > dis[x] + es[i].cost) { dis[v] = dis[x] + es[i].cost; if(!used[v]) { q.push(v); used[v] = 1; } } } }}int deal(char c){ return (int)(c);}char s[2];int main(){ cin >> E; memset(first,-1,sizeof(first)); for(int i = 1; i <= E; i ++) { int f, t, d; scanf("%s", s); f = deal(s[0]); scanf("%s", s); t = deal(s[0]); scanf("%d", &d); build(f,t,d); build(t,f,d); } spfa(deal('Z')); int minn = 1e9, ans; for(int i = deal('A'); i < deal('Z'); i ++) if(dis[i] < minn) { minn = dis[i]; ans = i; } cout << (char)ans << " " << minn << endl; return 0;}
dijkstra
#include <iostream>#include <cstdio>#include <queue>#include <cstring>#define MAX_V 200#define MAX_E (10000+10)using namespace std;int E, tot = 0;int first[MAX_V], nxt[MAX_E << 1], dis[MAX_V];bool done[MAX_V];struct edge{ int from, to, cost;}es[MAX_E << 1];void build(int ff, int tt, int dd){ es[++tot] = (edge){ff,tt,dd}; nxt[tot] = first[ff]; first[ff] = tot;}struct zt{ int v, d; bool operator < (const zt b) const { return d > b.d; }};priority_queue <zt> q;void dijkstra(int s){ memset(dis,63,sizeof(dis)); dis[s] = 0; q.push((zt){s,dis[s]}); while(q.size()) { int x = q.top().v; q.pop(); if(done[x]) continue; done[x] = 1; for(int i = first[x]; i != -1; i = nxt[i]) { int v = es[i].to; if(dis[v] > dis[x] + es[i].cost) { dis[v] = dis[x] + es[i].cost; q.push((zt){v,dis[v]}); } } }}int deal(char c){ return (int)(c);}char s[2];int main(){ cin >> E; memset(first,-1,sizeof(first)); for(int i = 1; i <= E; i ++) { int f, t, d; scanf("%s", s); f = deal(s[0]); scanf("%s", s); t = deal(s[0]); scanf("%d", &d); build(f,t,d); build(t,f,d); } dijkstra(deal('Z')); int minn = 1e9, ans; for(int i = deal('A'); i < deal('Z'); i ++) if(dis[i] < minn) { minn = dis[i]; ans = i; } cout << (char)ans << " " << minn << endl; return 0;}
1 0
- Codevs 1079 回家 最短路 spfa || dijkstra
- codevs 1079 回家(最短路)
- HDU2544:最短路【Dijkstra & SPFA】
- 最短路 spfa, dijkstra, Floyd
- 最短路spfa dijkstra模板
- HDU2544:最短路(Dijkstra,SPFA)
- 最短路【dijkstra】【floyd 】【spfa】
- 最短路(dijkstra、spfa)
- codevs 1557 热浪 SPFA 最短路
- HDU1535最短路 (SPFA/DIJKSTRA + priority_queue)
- hdu 2544 最短路 (dijkstra/floyd/spfa)
- [dijkstra/SPFA/floyd]HDU 2544最短路
- hdu1595(枚举+最短路,Dijkstra/SPFA)
- HDU 2544 最短路 (Dijkstra || SPFA)
- 【最短路三算法】Floyd,Dijkstra,SPFA.
- 最短路模板 Dijkstra+Floyd+SPFA
- hdu 2544 最短路(dijkstra||spfa)
- HDU2544---最短路(dijkstra&&floyd&&spfa)
- java中continue标记的使用
- shared_ptr线程安全性分析
- Problem D Parentheses
- Hibernate5配置异常Error executing DDL via JDBC Statement
- POJ 2395
- Codevs 1079 回家 最短路 spfa || dijkstra
- 第2.2章 WEB系统最佳实践Web.xml配置
- POJ 3278
- 【洛谷 1508】 Likecloud-吃、吃、吃
- Java——第三章(流程控制语句)项目案例
- Linux下查看SSD4K对齐EXT4分区开启Trim及验证的方法
- iOS 开发者必须知道的新特性
- 【七】最优间隔分类器问题
- 存储过程-第三课(函数)