【整理】ACM代码整理 BUN 1054

http://www.bnuoj.com/bnuoj/problem_show.php?pid=1054

#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
const int maxn = 110;
char a[maxn][maxn];
int vis[maxn][maxn],n,m;
int ax[5] = {-1,0,1,0};
int ay[5] = {0,-1,0,1};
struct Migong{
	int x,y;
	int step;
}str;
Migong finish,now;


int bfs(){
	queue<Migong> que;
	que.push(str);
	while(!que.empty()){
		now = que.front();
		if(now.x == finish.x && now.y == finish.y)return now.step;
		que.pop();
		for(int i=0;i<4;i++){
			Migong temp;
			temp.x = now.x +ax[i];
			temp.y = now.y +ay[i];
			temp.step = now.step+1;
			if(temp.x>=0&&temp.x<n&&temp.y>=0&&temp.y<m&&!vis[temp.x][temp.y]&&a[temp.x][temp.y]!='*'){
				vis[temp.x][temp.y] = 1;
				que.push(temp);
			}
		}
	}
	return -1;
}

int main() {
	while(cin>>n>>m){
		memset(vis,0,sizeof(vis));
		for(int i=0;i<n;i++){
			for(int j=0;j<m;j++){
				cin>>a[i][j];
				if(a[i][j] == 'S'){
					str.x = i;
					str.y = j;
					str.step = 0;
					vis[i][j] = 1;
				}
				if(a[i][j] == 'T'){
					finish.x = i;
					finish.y = j;
				}
			}
		}
		cout<<bfs()<<endl;
	}
	
	return 0;
}


你可能感兴趣的:(【整理】ACM代码整理 BUN 1054)