[Swust OJ 767]--将军回家(Dijkstra算法)
题目链接:http://acm.swust.edu.cn/problem/767/
在涪江河的两边共有n个城市,其中位于一边的城市属于1类城市,另外一边的属于2类城市,(特别的:城市1属于1类,城市2属于2类)。现在知道一些道路的情况,比如知道城市1到城市5之间有一条长度为100的路。将军要从城市1回到城市2的家,他就开始设计回家的线路。回家时由于驾照的关系,只能越过一次涪江河。现在问从城市1到城市2的最短距离,路是双向的。
多组测试数据。
每组数据的第一行输入城市个数N(2<=N<=600),第二行输入城市之间的路的数目M((0<=M<=10000),
接下里M行,输入每条道路的信息,每行S,E,T都是整数,代表城市S和城市E之间有一条长度为T的路。
最后一行N个数只能是1或2代表第i个城市属于哪类。
为了简化题目,我们总认为城市1是属于1类,城市2属于2类 N = 0时表示结束
Output
输出城市1到城市2的最短路径,如果不存在则输出-1
|
2
1
1 2 100
1 2
3
3
1 2 100
1 3 40
2 3 50
1 2 1
5
5
3 1 200
5 3 150
2 5 160
4 3 170
4 2 170
1 2 2 2 1
0
|
|
100
90
540
|
解题思路:一个Dijkstra题,注意一类城市,二类城市分属河两岸,且将军只能过河一次优化路径是注意下就OK了
!vis[j] && (v[sign] == 1 || (v[sign] == 2 && v[j] == 2)) && dis[j] > dis[sign] + mpt[sign][j]
基于只能过河一次如果把一二类城市间连通状态改成单向应该也可以,到时有空去试一下Orz~~~
代码如下:
#include <stdio.h>
#include <string.h>
#define inf 0x3f3f3f3f int m, n, mpt[][], v[], dis[], vis[];
void Dijkstra(){
int i, j, minn, sign;
for (i = ; i <= n; i++) dis[i] = mpt[][i];
vis[] = ;
dis[] = ;
for (i = ; i <= n; i++){
minn = inf;
for (j = ; j <= n; j++){
if (!vis[j] && minn > dis[j]){
minn = dis[j];
sign = j;
}
}
if (minn >= inf)break;
vis[sign] = ;
for (j = ; j <= n; j++){
if (!vis[j] && (v[sign] == || (v[sign] == && v[j] == )) && dis[j] > dis[sign] + mpt[sign][j])
dis[j] = dis[sign] + mpt[sign][j];
}
}
if (dis[] >= inf)
printf("-1\n");
else
printf("%d\n", dis[]);
} int main(){
int i, a, b, c;
while (~scanf("%d", &n) && n){
scanf("%d", &m);
memset(mpt, inf, sizeof(mpt));
memset(vis, , sizeof(vis));
for (i = ; i <= m; i++){
scanf("%d%d%d", &a, &b, &c);
if (c >= mpt[a][b])continue;
mpt[a][b] = c;
mpt[b][a] = c;
}
for (i = ; i <= n; i++) scanf("%d", &v[i]);
Dijkstra();
}
return ;
}
[Swust OJ 767]--将军回家(Dijkstra算法)的更多相关文章
- [Swust OJ 412]--医院设置(floyd算法)
题目链接:http://acm.swust.edu.cn/problem/412/ Time limit(ms): 1000 Memory limit(kb): 65535 Description ...
- SWUST OJ 1075 求最小生成树(Prim算法)
求最小生成树(Prim算法) 我对提示代码做了简要分析,提示代码大致写了以下几个内容 给了几个基础的工具,邻接表记录图的一个的结构体,记录Prim算法中最近的边的结构体,记录目标边的结构体(始末点,值 ...
- [Swust OJ 842]--实验室和食堂(最短路,Dijkstra算法)
题目链接:http://acm.swust.edu.cn/problem/842/ Time limit(ms): 1000 Memory limit(kb): 10000 Description ...
- SDUT OJ 图结构练习——最短路径 ( Floyed 算法 AND Dijkstra算法)
图结构练习——最短路径 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Discuss Problem ...
- [Swust OJ 404]--最小代价树(动态规划)
题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535 Des ...
- Cocos2d-x 地图步行实现1:图论Dijkstra算法
下一节<Cocos2d-x 地图行走的实现2:SPFA算法>: http://blog.csdn.net/stevenkylelee/article/details/38440663 本文 ...
- 图的最短路径-----------Dijkstra算法详解(TjuOj2870_The Kth City)
做OJ需要用到搜索最短路径的题,于是整理了一下关于图的搜索算法: 图的搜索大致有三种比较常用的算法: 迪杰斯特拉算法(Dijkstra算法) 弗洛伊德算法(Floyd算法) SPFA算法 Dijkst ...
- 图论——最短路径 Dijkstra算法、Floyd算法
1.弗洛伊德算法(Floyd) 弗洛伊算法核心就是三重循环,M [ j ] [ k ] 表示从 j 到 k 的路径,而 i 表示当前 j 到 k 可以借助的点:红色部分表示,如果 j 到 i ,i 到 ...
- dijkstra算法的堆优化
普通的dijkstra算法模板: //数据结构 int g[LEN][LEN]; //邻接矩阵 int vis[LEN]; //标记是否访问 int dist[LEN] //源点到各点的距离 fill ...
随机推荐
- 重拾javascript动态客户端网页脚本
笔记一: 一.DOM 作用: · DOM(Doument Object Model) 1.document文档 HTML 文件 (标记语言) <html> < ...
- ngCookies模块
Angular中ngCookies模块介绍 1.Cookie介绍 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在 ...
- Thread-safety with regular expressions in Java
As mentioned in our introduction to the Pattern and Matcher classes, the Java regular expression API ...
- 将四个BYTE数值转换成IEEE754标准的浮点数(两种方法:用Addr函数取字节数字的首地址,或者用Absolute关键字)
在工作中,经常使用到IEEE754格式的数据.IEEE754格式的数据占四个字节,好像Motorola格式和Intel格式的还不一样. 由于工作中很少和他打交道(使用的软件内部已经处理),就没太在意. ...
- 怎样从一个DLL中导出一个C++类
原文作者:Alex Blekhman 翻译:朱金灿 原文来源: http://www.codeproject.com/KB/cpp/howto_export_cpp_classes.aspx 译 ...
- python 在 for i in range() 块中改变 i 的值的效果
先上一段代码: for i in range(3): i = 2 print(i) 实际结果是: 2 2 2 可以发现实际效果就是 在每次执行 for 语句块的内容后 i 会被重新赋值
- Ubuntu下lamp(PHP+Mysql+Apache)搭建+完全卸载卸载方法
安装apache2 sudo apt-get install apache2 安装完成,运行如下命令重启下: sudo /etc/init.d/apache2 restart 在浏览器里输入http: ...
- 吝啬的国度(dfs+vector)
吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...
- [置顶] .NET下枚举类型的Save和Load分析
今天在写代码的时候,心血来潮对原来的字符串保存状态位的方式很不满意,对于代码里出现了 state == "1" 这样的状态判断很是不爽.那么理想中的判断是怎样的呢?很简单如你所想枚 ...
- CodeForces 160D - Distance in Tree 树型DP
题目给了512MB的空间....用dp[k][i]代表以k为起点...往下面走(走直的不打岔)i步能有多少方案....在更新dp[k][i]过程中同时统计答案.. Program: #include& ...