zoj2411-Link Link Look(WA)

个人认为错的例子都测试过没问题,还找不出哪里有问题= =但是就是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;
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值