Sicily 4478. Walk This Way
2012-02-10 23:54
267 查看
第三届新手赛AC的第三题,也是最后一题(这届新手赛恰好过3题的队伍从第8名一直排到第37名,我队第33名,主要是经验缺乏)。开始时没有注意到是无向图,而且错误地使用了memset函数,导致WA。问题求的是从s点到t点最少要走多少路,解决方案可以用Floyd最短路径算法,也可以是Dijkstra单源最短路径算法。当时做这道题时,鉴于前者没有想到,后者不会实现,最后是通过对宽搜的改进AC的。大致思路是把visited这个bool数组改成int数组,让其携带访问对应点的最短距离信息,宽搜时再判断访问改点时是否会产生更短距离的路径来决定是否进行再访问。虽然当时的做法代码较为简便,但毕竟有点非主流;而Floyd算法求出了每两个点之间的最短路径,却有很多都是我们不关心(我们只关心s点到t点)的。综合而言,时间效率最高、最主流的算法应该就是Dijkstra单源最短路径算法,后来(新手赛结束后3天)在课堂上学习后写出该代码。
Run Time: 0sec
Run Memory: 304KB
Code length: 1395Bytes
Submit Time: 2011-12-21 23:51:11
Run Time: 0sec
Run Memory: 304KB
Code length: 1395Bytes
Submit Time: 2011-12-21 23:51:11
// Problem#: 4478 // Submission#: 1107779 // The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License // URI: http://creativecommons.org/licenses/by-nc-sa/3.0/ // All Copyright reserved by Informatic Lab of Sun Yat-sen University #include <cstdio> using namespace std; int main() { int T; int i, j; int N, M; int a, b, c, d; int s, t; int min, add; bool included[ 100 ]; int walk[ 100 ]; int dist[ 100 ][ 100 ]; scanf( "%d", &T ); while ( T-- ) { scanf( "%d%d", &N, &M ); for ( i = 0; i < N; i++ ) { included[ i ] = false; for ( j = 0; j < N; j++ ) dist[ i ][ j ] = 10001; } for ( i = 0; i < M; i++ ) { scanf( "%d%d%d%d", &a, &b, &c, &d ); dist[ a ][ b ] = ( d == 1 ? 0: c ); dist[ b ][ a ] = ( d == 1 ? 0: c ); } scanf( "%d%d", &s, &t ); for ( i = 0; i < N; i++ ) walk[ i ] = dist[ s ][ i ]; add = s; included[ s ] = true; for ( j = 1; !included[ t ] && j <= N; j++ ) { min = 10001; for ( i = 0; i < N; i++ ) { if ( !included[ i ] && walk[ i ] < min ) { add = i; min = walk[ i ]; } } included[ add ] = true; for ( i = 0; i < N; i++ ) { if ( !included[ i ] && min + dist[ add ][ i ] < walk[ i ] ) walk[ i ] = min + dist[ add ][ i ]; } } printf( included[ t ] ? "%d\n": "-1\n", walk[ t ] ); } return 0; }
相关文章推荐
- Sicily. Walk This Way
- J. Walk This Way
- This application has requested the Runtime to terminate it in an unusual way
- Cocos2d-X游戏【泰然网《跑酷》】JS到C++移植6:Running This Way
- This application has request the Runtime to terminate it in an unusual way.
- This application has requested the Runtime to terminate it in an unusual way.
- java.sql.SQLException: QueryRunner requires a DataSource to be invoked in this way, or a Connection
- O-Kai - This group captures Taiwan's native spirit in an unexpected way(1)
- Sicily 1120. Walk Through the For
- win8安装 Matlab,运行出现 this application has requested the runtime to terminate it in an unusual way .
- Why did we implement Swing in this way?(为什么Swing要这样实现呢?)
- 一起看代码来玩玩QT之18QSqlDatabase(two 用QSqlTableModel 来操作database this way very nice)
- This application has requested the Runtime to terminate it in an unusual way. Please contact the app
- my way begin at this day!
- This application has requested the Runtime to terminate it in an unusual way
- 关于C++程序运行程序是出现的this application has requested the runtime to terminate it in an unusual way. 异常分析
- this application has requested the runtime to terminate it in an unusual way
- win8安装 Matlab,运行出现 this application has requested the runtime to terminate it in an unusual way
- This application has requested the Runtime to terminate it in an unusual way
- sicily 1415. Honeycomb Walk【动态规划】