您的位置:首页 > 其它

zoj2411-Link Link Look(WA)

2012-12-01 00:04 330 查看
个人认为错的例子都测试过没问题,还找不出哪里有问题= =但是就是wa,对比了ac代码一样的输入输出...

#include<iostream>
#include<queue>
#include<cstring>
using namespace std;
const int pmove[4][2]={{0,1},{0,-1},{-1,0},{1,0}};//移动
int N,M;
int maze[102][102],tmaze[102][102];
struct node
{
int dir;
int x,y;
int turns;
};
bool BFS(int y1,int x1,int y2,int x2)
{
if(tmaze[y1][x1]!=tmaze[y2][x2]||tmaze[y1][x1]==0)
return false;
queue<node> que;
node now,temp;
tmaze[y1][x1]=-1;
now.x=x1;
now.y=y1;
now.turns=0;
now.dir=-1;
que.push(now);
while(!que.empty())
{
temp=que.front();
que.pop();
for(int v=0;v<4;v++)
{
now.x=temp.x+pmove[v][0];
now.y=temp.y+pmove[v][1];
now.turns=temp.turns;
now.dir=temp.dir;
if(now.x<0||now.y<0||now.x>M+1||now.y>N+1)
continue;
if(now.dir!=v)
now.turns++;
now.dir=v;
if(now.dir>3)
continue;
if(now.y==y2&&now.x==x2)
{
return true;
}
if(tmaze[now.y][now.x]==0)
{
tmaze[now.y][now.x]=-1;
que.push(now);
}
}
}
return false;
}
int main()
{
while(cin>>N>>M&&N&&M)
{
for(int i=0;i<=N+1;i++)
for(int j=0;j<=M+1;j++)
{
maze[i][j]=0;
tmaze[i][j]=0;
}
for(int i=1;i<=N;i++)
for(int j=1;j<=M;j++)
{
cin>>maze[i][j];
tmaze[i][j]=maze[i][j];
}
int cnum,count=0;
cin>>cnum;
while(cnum--)
{
int x1,y1,x2,y2;
cin>>y1>>x1>>y2>>x2;
if(y1==y2&&x1==x2)
continue;
if(BFS(y1,x1,y2,x2))
{
count+=2;
maze[y1][x1]=0;
maze[y2][x2]=0;
}
for(int i=0;i<=N+1;i++)
{
for(int j=0;j<=M+1;j++)
cout<<tmaze[i][j]<<"   ";
cout<<endl;
}
for(int i=0;i<=N+1;i++)
for(int j=0;j<=M+1;j++)
tmaze[i][j]=maze[i][j];
}
cout<<count<<endl;
}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: