博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2263
阅读量:5922 次
发布时间:2019-06-19

本文共 1897 字,大约阅读时间需要 6 分钟。

最短路

map如果要使用char*作为key,不能简单的直接使用,可以用string作为map的key,使用的时候将char*转换为string。转换的方法是使用string的assign函数。string.assign(char*);

#include 
#include
#include
#include
#include
#include
using namespace std;#define maxn 205#define maxm 20005#define maxl 50struct Edge{ int v, w, next;}edge[maxm * 2];int city_num, road_num;int head[maxn];map
city_name;int city_cnt;int edge_cnt;int start_pos, end_pos;int dist[maxn];bool vis[maxn];void addedge(int a, int b, int weight){ edge[edge_cnt].v = b; edge[edge_cnt].w = weight; edge[edge_cnt].next = head[a]; head[a] = edge_cnt++;}int city_id(char *st){ string a; a.assign(st); if (city_name.find(a) == city_name.end()) { city_name[a] = city_cnt++; return city_cnt - 1; } return city_name[a];}void input(){ memset(head, -1, sizeof(head)); edge_cnt = 0; city_cnt = 0; city_name.clear(); char a[maxl], b[maxl]; int weight; for (int i = 0; i < road_num; i++) { scanf("%s%s%d", a, b, &weight); int id_a = city_id(a); int id_b = city_id(b); addedge(id_a, id_b, weight); addedge(id_b, id_a, weight); } scanf("%s%s", a, b); start_pos = city_id(a); end_pos = city_id(b);}int dijkstra(int s, int e){ memset(vis, 0, sizeof(vis)); memset(dist, 0, sizeof(dist)); dist[s] = 10000; while (1) { int p = -1; int temp = -1; for (int i = 0; i < city_num; i++) if (!vis[i] && dist[i] > temp) { p = i; temp = dist[i]; } if (p == -1) break; vis[p] = true; for (int i = head[p]; i != -1; i = edge[i].next) dist[edge[i].v] = max(dist[edge[i].v], min(dist[p], edge[i].w)); } return dist[e];}int main(){ int t = 0; while (scanf("%d%d", &city_num, &road_num), city_num | road_num) { t++; input(); printf("Scenario #%d\n%d tons\n\n", t, dijkstra(start_pos, end_pos)); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/rainydays/archive/2013/06/11/3132195.html

你可能感兴趣的文章
滥用Accessibility service自动安装应用
查看>>
PHP基础
查看>>
[Servlet&amp;JSP] Cookie会话管理
查看>>
CDH5: 使用parcels配置lzo
查看>>
获取鼠标的位置/坐标
查看>>
Linux_NIS+NFS+Autofs
查看>>
VirtualBox下配置串口以及stty命令详解(原创)
查看>>
通过分析蜘蛛侠论坛中的版块管理功能来介绍该如何使用我开发出来的ROM框架...
查看>>
无线路由器用多少信道好?
查看>>
poi读取excel,获取全部数据.
查看>>
Java如何获取文件编码格式
查看>>
Java之JMX 详解
查看>>
iOS开发之JSON & XML
查看>>
Ubuntu安装配置mysql
查看>>
YARN加载本地库Unable to load native-hadoop library解决办法
查看>>
【Go语言】【4】GO语言类型和为类型增加方法
查看>>
Linux挂载ntfs分区
查看>>
软件需求调研“五步法” 收藏
查看>>
Html 语法学习笔记三
查看>>
IIS 服务或万维网发布服务,或者依赖这 服务可能在启动期间发生错误或者已禁用...
查看>>