| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
I got AC
#include <stdio.h>
char map[310][310];
int a[310][310];
int main()
{
int n,m,i,j,tx,ty;
while(scanf("%d %d",&n,&m)!=EOF)
{
if(n==0 && m==0)
break;
map[0][0]=map[n+1][0]=map[0][m+1]=map[n+1][m+1]=3;
for(i=1;i<=n;i++)
{
map[i][0]=map[i][m+1]=3;
scanf("%s",map[i]+1);
for(j=1;j<=m;j++)
{
if(map[i][j]=='Y')
{
a[i][j]=0;
map[i][j]=1;
}
else
{
a[i][j]=1000000000;
if(map[i][j]=='T')
{
map[i][j]=1;
tx=i;
ty=j;
}
else if(map[i][j]=='E')
{
map[i][j]=1;
}
else if(map[i][j]=='B')
{
map[i][j]=2;
}
else if(map[i][j]=='R')
{
map[i][j]=3;
}
else if(map[i][j]=='S')
{
map[i][j]=3;
}
}
}
}
for(i=1;i<=n;i++)
{
map[0][i]=map[n+1][i]=3;
}
while(-1)
{
int temp=0;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if(a[i][j]<1000000000)
{
if(map[i-1][j]<3 && a[i-1][j]>a[i][j]+map[i-1][j])
{
a[i-1][j]=a[i][j]+map[i-1][j];
temp=1;
}
if(map[i+1][j]<3 && a[i+1][j]>a[i][j]+map[i+1][j])
{
a[i+1][j]=a[i][j]+map[i+1][j];
temp=1;
}
if(map[i][j-1]<3 && a[i][j-1]>a[i][j]+map[i][j-1])
{
a[i][j-1]=a[i][j]+map[i][j-1];
temp=1;
}
if(map[i][j+1]<3 && a[i][j+1]>a[i][j]+map[i][j+1])
{
a[i][j+1]=a[i][j]+map[i][j+1];
temp=1;
}
}
}
}if(temp==0)
{
break;
}
}
if(a[tx][ty]<1000000000)
{
printf("%d\n",a[tx][ty]);
}
else
printf("-1\n");
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator