1321. Robot (dijkstra)
2012-03-12 23:37
423 查看
#include <iostream> //优先级队列实现dijkstra算法很方便 #include <cstring> #include <queue> using namespace std; class Path { public: int i, j; int dist; Path( int a, int b, int c ) { i = a; j = b; dist = c; } friend bool operator<(const Path &p1,const Path &p2 )//反向规定使得top变为最小值 { return p1.dist > p2.dist; } }; int dirt[4][2]={{-1,0},{0,1},{1,0},{0,-1}}; int main() { int T,row,column,si,sj,ti,tj,i,j,k,grid[101][101]; bool included[ 101 ][ 101 ]; cin>>T; while(T--) { priority_queue<Path> q; cin>>row>>column; for (i=1;i<=row;i++) for (j=1;j<=column;j++) cin>>grid[i][j]; cin>>si>>sj>>ti>>tj; memset(included,false,sizeof(included)); included[si][sj]=true; Path add=Path(si,sj,grid[si][sj]); while(!included[ti][tj]) { for(k=0;k<4;k++) { i=add.i+dirt[k][0]; j=add.j+dirt[k][1]; if(i>=1 && i<=row && j>=1 && j<=column && !included[i][j]) q.push( Path(i,j,add.dist+grid[i][j])); } add=q.top(); while (included[add.i][add.j]) { q.pop(); add = q.top(); } included[add.i][add.j]=true; } cout<<add.dist<<endl; } return 0; }
相关文章推荐
- sicily 1321 Robot(Dijkstra)
- sicily 1321. Robot
- 314 - Robot(用Dijkstra怎么还ac不了)
- sicily1321-robot
- 第十六周:( Sicily1321) Robot(c++)
- Sicily 1321. Robot
- sicily1321. Robot
- Sicily 1321. Robot
- sicily 1321 dijkstra
- sicily 1321.Robot
- HDU 1596 find the safest road(Dijkstra)
- Dijkstra最短路径算法
- poj --1321
- 【省选模拟试题】排水系统 dijkstra+最短路径树+优先队列维护(当然这个和dij的不是同一个)
- 最短路知识点总结(Dijkstra,Floyd,SPFA,Bellman-Ford)
- ZOJ - 3981 A.Balloon Robot 思维
- POJ 1321--棋盘问题
- 新dijkstra
- ZPJ - 1053 FDNY to the Rescue!(最短路 Dijkstra),POJ 1122
- Dijkstra的双栈算术表达式求值算法