NYOJ 284 坦克大战【优先队列】
2012-03-10 16:19
323 查看
代码: #include<stdio.h> #include<queue> #include<string.h> int map[305][305],n,m; int zy[]={0,0,1,-1},sx[]={1,-1,0,0}; using namespace std; struct node { friend bool operator< (node n1, node n2) //优先级。。 { return n1.step> n2.step; } int x; int y; int step; }; void bfs(int x1,int y1) { int a,b,i,j,loop=0; int min=1; node k={x1,y1,min}; priority_queue<node> q; q.push(k); while(!q.empty()) { i=q.top().x; j=q.top().y; min=q.top().step; q.pop(); for(a=0;a<4;a++) { x1=i+zy[a]; y1=j+sx[a]; if(map[x1][y1]==1||map[x1][y1]==2) { node p1={x1,y1,min+map[x1][y1]}; q.push(p1); map[x1][y1]=0; } if(map[x1][y1]==4) { loop=1; break; } } if(loop==1) { break; } } if(loop==1) printf("%d\n",min); else printf("-1\n"); } int main() { int a,b; char ch; while(1) { scanf("%d %d",&n,&m); if(n==0&&m==0) break; memset(map,0,sizeof(map));//这个不用解释了吧。。在外面加一层0。。 for(a=1;a<=n;a++) { getchar();//注意。。少了你就悲剧了。。 for(b=1;b<=m;b++) { scanf("%c",&ch); if(ch=='Y') //you map[a][b]=3; else if(ch=='T') map[a][b]=4;//目标 else if(ch=='S'&&ch=='R') map[a][b]=0; //不能走 else if(ch=='E') map[a][b]=1; else if(ch=='B') //注意呀。。这句话换成else结果就错了。。不信你试试。。 map[a][b]=2; } } for(a=1;a<=n;a++) for(b=1;b<=m;b++) if(map[a][b]==3) bfs(a,b); } }
原题链接:点击打开
有点郁闷呀!!早就该ac的题 找了一天的错。。。⊙﹏⊙。。找到错误后 还不知道原因。。先交了再说吧。。英文题 看懂题以后其实挺简单的。。广度优先搜索+优先队列就能ac了。。就是一些细节要注意一下。。要不然就一直wr了。。。
代码在上面::
相关文章推荐
- NYOJ 284 坦克大战 【BFS】+【优先队列】
- NYOJ 284 坦克大战 【BFS】+【优先队列】
- NYOJ 284--坦克大战【BFS && 优先队列】
- NYOJ 284 坦克大战 【BFS】+【优先队列】
- NYOJ 284 坦克大战 && POJ 2312 Battle City (广搜+优先队列)
- NYOJ 284 坦克大战 bfs + 优先队列
- nyoj284 坦克大战 (延迟搜索)
- nyoj 284 坦克大战 【bfs(简单题)】
- NYOJ-284 坦克大战 ------BFS/优先队列
- (NYoj 284)坦克大战--裸BFS ,优先队列
- nyoj 284-坦克大战
- POJ 2312 NYOJ284 【坦克大战】优先队列BFS
- NYOJ-284简单BFS注意下优先队列的使用就可以了
- nyoj 284 坦克大战 简单搜索
- nyoj 284 坦克大战 简单搜索
- nyoj 284 坦克大战 (优先队列)
- NYOJ 284 优先队列 搜索
- nyoj 55 懒省事的小明【优先队列】
- nyoj--55--懒省事的小明(STL优先队列)
- nyoj 55 懒省事的小明【贪心+优先队列】