题目链接:http://acm.swust.edu.cn/problem/767/

Time limit(ms): 1000        Memory limit(kb): 65535
 
Description

在涪江河的两边共有n个城市,其中位于一边的城市属于1类城市,另外一边的属于2类城市,(特别的:城市1属于1类,城市2属于2类)。现在知道一些道路的情况,比如知道城市1到城市5之间有一条长度为100的路。将军要从城市1回到城市2的家,他就开始设计回家的线路。回家时由于驾照的关系,只能越过一次涪江河。现在问从城市1到城市2的最短距离,路是双向的。

 
Input

多组测试数据。

每组数据的第一行输入城市个数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

 
Sample Input
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
Sample Output
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算法)的更多相关文章

  1. [Swust OJ 412]--医院设置(floyd算法)

    题目链接:http://acm.swust.edu.cn/problem/412/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

  2. SWUST OJ 1075 求最小生成树(Prim算法)

    求最小生成树(Prim算法) 我对提示代码做了简要分析,提示代码大致写了以下几个内容 给了几个基础的工具,邻接表记录图的一个的结构体,记录Prim算法中最近的边的结构体,记录目标边的结构体(始末点,值 ...

  3. [Swust OJ 842]--实验室和食堂(最短路,Dijkstra算法)

    题目链接:http://acm.swust.edu.cn/problem/842/ Time limit(ms): 1000 Memory limit(kb): 10000   Description ...

  4. SDUT OJ 图结构练习——最短路径 ( Floyed 算法 AND Dijkstra算法)

    图结构练习——最短路径 Time Limit: 1000 ms            Memory Limit: 65536 KiB Submit Statistic Discuss Problem ...

  5. [Swust OJ 404]--最小代价树(动态规划)

    题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535   Des ...

  6. Cocos2d-x 地图步行实现1:图论Dijkstra算法

    下一节<Cocos2d-x 地图行走的实现2:SPFA算法>: http://blog.csdn.net/stevenkylelee/article/details/38440663 本文 ...

  7. 图的最短路径-----------Dijkstra算法详解(TjuOj2870_The Kth City)

    做OJ需要用到搜索最短路径的题,于是整理了一下关于图的搜索算法: 图的搜索大致有三种比较常用的算法: 迪杰斯特拉算法(Dijkstra算法) 弗洛伊德算法(Floyd算法) SPFA算法 Dijkst ...

  8. 图论——最短路径 Dijkstra算法、Floyd算法

    1.弗洛伊德算法(Floyd) 弗洛伊算法核心就是三重循环,M [ j ] [ k ] 表示从 j 到 k 的路径,而 i 表示当前 j 到 k 可以借助的点:红色部分表示,如果 j 到 i ,i 到 ...

  9. dijkstra算法的堆优化

    普通的dijkstra算法模板: //数据结构 int g[LEN][LEN]; //邻接矩阵 int vis[LEN]; //标记是否访问 int dist[LEN] //源点到各点的距离 fill ...

随机推荐

  1. discuz_style_default.xml 修改

    <?xml version="1.0" encoding="ISO-8859-1"?> <root> <item id=" ...

  2. 【转载】Android开源:数据库ORM框架GreenDao学习心得及使用总结

    转载链接:http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁 ...

  3. xmu1125 越野车大赛(三分)

    1125: 越野车大赛 Time Limit: 500 MS  Memory Limit: 64 MB  Special JudgeSubmit: 4  Solved: 3[Submit][Statu ...

  4. 基于mini2440的看门狗(裸机)

    在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生 ...

  5. Android二维码开源项目zxing用例简化和生成二维码、条形码

    上一篇讲到:Android二维码开源项目zxing编译,编译出来后有一个自带的測试程序:CaptureActivity比較复杂,我仅仅要是把一些不用的东西去掉,用看起来更方便,二维码和条形码的流行性自 ...

  6. HDU1046:Gridland

    Problem Description For years, computer scientists have been trying to find efficient solutions to d ...

  7. mac上搭建svn服务器

    1.terminal 执行svnadmin create 库地址/库名,生成的即为svn库根地址. 2.修改对应目录下conf/svnserve.conf文件: anon-access = read ...

  8. Python学习之路——初识Python

    一.第一个程序Hello World: 1.打印输出Hello World: Python2打印方法: >>> print "hello world"hello ...

  9. c# zip file and folder programmatically

    In .net 4.5 Framework, we can zip a file by this way: private static string CompressFile(string sour ...

  10. 基于MAVEN的SSM+ehcache+c3p0

    目录结构: 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http ...