| ||||||||||
| 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 | |||||||||
Re:怎么wa了啊...In Reply To:怎么wa了啊... Posted by:happynp at 2007-06-23 16:46:26 #include<iostream>
#include<queue>
using namespace std;
#define maxN 310
int m,n;
char a[maxN][maxN];
int f[maxN][maxN];
int dir[4][2] = {
-1, 0,
1, 0,
0,-1,
0, 1
};
typedef struct point
{
int x;
int y;
}point;
bool operator < (const point &p, const point &q)
{
return f[p.x][p.y] > f[q.x][q.y];
}
priority_queue<point> Q;
bool EnQueue(point &t)
{
if(!Q.empty())
{
t = Q.top();
Q.pop();
return true;
}
return false;
}
bool inner(point s, int r,int c)
{
if(s.x>=0 && s.x<r && s.y>=0 && s.y<c)
return true;
else
return false;
}
int BFS(point s)
{
int i = 0;
point here = s,nbr;
do{
for(i = 0; i<4; i++)
{
nbr.x = here.x + dir[i][0];
nbr.y = here.y + dir[i][1];
if( inner(nbr,m,n)
&& f[nbr.x][nbr.y] == 0
&& a[nbr.x][nbr.y] !='R'
&& a[nbr.x][nbr.y] !='S'
&& a[nbr.x][nbr.y] !='Y')
{
if(a[nbr.x][nbr.y] == 'B')
f[nbr.x][nbr.y] = f[here.x][here.y] + 2;
else if(a[nbr.x][nbr.y] == 'E')
f[nbr.x][nbr.y] = f[here.x][here.y] + 1;
else if(a[nbr.x][nbr.y] == 'T')
return f[here.x][here.y] + 1;
Q.push(nbr);
}
}
if(Q.empty())
return -1;
EnQueue(here);
}while(1);
}
int main(void)
{
int i,j;
point s;
while(EOF!=scanf("%d%d",&m,&n),m||n) // m row , n col
{
for(i=0;i<m;i++)
scanf("%s",&a[i]);
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{
if(a[i][j] == 'Y')
{
s.x = i;
s.y = j;
goto solve;
}
}
solve:
memset(f,0,sizeof(f));
printf("%d\n",BFS(s));
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator