poj2312解题报告

第三个BFS

题目大意:这个题是以坦克大战为原型出来的题目,就是走迷宫的变种,给定一个地图mxn的地图,地图上有普通的砖B,金砖S,河R,和一个宝物位置T,和你的位置Y,求吃到宝物的最小步数(坦克通过普通砖需要两步,不能通过金砖和河)...

poj2312解题报告_第1张图片

 

Sample Input

3 4
YBEB
EERE
SSTE
0 0

Sample Output

8

 

思路:走迷宫的思路,加点变化,在将横纵坐标步数入队的同时在将stay入队,如果当前走的点是普通砖,stay就等于1,否则等于0,当这个点出队的时候如果stay=1就另stay=0,再入队一次。。实现了原地停留一步的效果。。。

 

 

 

#include using namespace std; struct mov { int x,y; }mov[4]={1,0,-1,0,0,1,0,-1}; char map[310][310]; int m,n,lock[310][310],head,rear; int queue[1000000]; int pop(){ return queue[head++%1000000]; } void push(int i){ queue[rear++%1000000]=i; } int bfs() { int i,j,stay,step,fang; while(head!=rear) { i=pop(); j=pop(); stay=pop(); step=pop(); if(map[i][j]=='T') return step; if(stay) { push(i); push(j); push(stay-1); push(step+1); continue; } for(fang=0;fang<4;fang++) if(i+mov[fang].x>-1&&i+mov[fang].x-1&&j+mov[fang].y>m>>n&&m) { head=rear=0; memset(lock,0,sizeof(lock)); for(i=0;i>map[i]; for(i=0;i

你可能感兴趣的:(北大POJ)