Time Limit: 10000MS | Memory Limit: 65536K | |||
Total Submissions: 48 | Accepted: 23 |
Description
Input
Output
Sample Input
Sample Output
Source
參考代碼:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
struct node
{
int x,y,step;
}s;
int n,m;
int vis[1000][1000];
char mp[1000][1000];
int dis[4][2]={1,0,-1,0,0,1,0,-1};
int bfs()
{
queue<node>q;
node next,p,e;
p.x=s.x;
p.y=s.y;
p.step=0;
int i;
vis[p.x][p.y]=1;
q.push(p);
while(!q.empty())
{
e=q.front();
q.pop();
if(mp[e.x][e.y]=='T')
return e.step;
for(i=0;i<4;i++)
{
next.x=e.x+dis[i][0];
next.y=e.y+dis[i][1];
if(mp[next.x][next.y]=='T')
return e.step+1;
if(mp[next.x][next.y]=='.'&&vis[next.x][next.y]==0&&next.x>0&&next.x<=n&&next.y>0&&next.y<=m)
{
vis[next.x][next.y]=1;
next.step=e.step+1;
q.push(next);
}
}
}
return 0;
}
int main()
{
while(~scanf("%d%d%*c",&n,&m))
{
memset(vis,0,sizeof(vis));
memset(mp,0,sizeof(mp));
int i,j;
for(i=1;i<=n;i++)
{
scanf("%s",mp[i]+1);
for(j=1;j<=m;j++)
{
if(mp[i][j]=='S')
{
s.x=i;
s.y=j;
}
}
}
int ans=bfs();
if(ans==0)
printf("-1\n");
else
printf("%d\n",ans);
}
return 0;
}
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。