AOJ-579-期末考试之考试传纸
http://icpc.ahu.edu.cn/OJ/Problem.aspx?id=579
BFS,按模版写的,比赛时数据输入处理弄错了,哎。。。太弱了。。。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int n,m;
char map[105][105];
int ans[105][105];
int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
typedef struct
{
int x;
int y;
}node;
int bfs(node s,node e)
{
node que[10005];
node tt;
int head=0,tail=1,i;
que[0]=s;
ans[s.x][s.y]=0;
map[s.x][s.y]='#';
while(head<tail)
{
s=que[head++];
for(i=0;i<4;i++)
{
tt.x=s.x+dir[i][0];
tt.y=s.y+dir[i][1];
if(tt.x>=0&&tt.x<n&&tt.y>=0&&tt.y<m&&map[tt.x][tt.y]!='#')
{
ans[tt.x][tt.y]=ans[s.x][s.y]+1;
if(tt.x==e.x&&tt.y==e.y)
return ans[e.x][e.y];
map[tt.x][tt.y]='#';
que[tail++]=tt;
}
}
}
return 0;
}
int main()
{
int i,j;
char ch;
node s,e;
int k1,k2;
int ans;
while(scanf("%d %d",&n,&m)!=EOF)
{
memset(map,0,sizeof(map));
for(i=0;i<n;i++)
{
getchar();
for(j=0;j<m;j++)
{
scanf("%c",&ch);
if(ch=='A')
{
s.x=i;
s.y=j;
}
else if(ch=='B')
{
e.x=i;
e.y=j;
}
else if(ch=='T') //监考老师的一圈都是不可达的
{
for(k1=i-1;k1<=i+1;k1++)
for(k2=j-1;k2<=j+1;k2++)
if(k1>=0&&k1<n&&k2>=0&&k2<m)
map[k1][k2]='#';
}
if(map[i][j]!='#')
map[i][j]=ch;
}
}
if(map[s.x][s.y]=='#'||map[e.x][e.y]=='#')
{
printf("-1\n");
continue;
}
ans=bfs(s,e);
if(ans)
printf("%d\n",ans);
else
printf("-1\n");
}
return 0;
}