代码都在输出-1
查看原帖
代码都在输出-1
525998
huangjiasheng楼主2022/4/22 17:05

P2802 回家

为什么代码敲了100多行还都输出-1

/*****************************************
备注:
******************************************/
#include <queue>
#include <math.h>
#include <stack>
#include <stdio.h>
#include <iostream>
#include <vector>
#include <iomanip>
#include <string.h>
#include <algorithm>
using namespace std;
#define LL long long
const int N = 1e5 + 10;
const int INF = 0x3f3f3f3f;
int sx,sy;
int xx,yy;
int cnt;
int dy[]={0,0,1,-1};
int dx[]={1,-1,0,0}; 
int a[2400][2400];
int n,m;
struct node
{
	int x,y,step,xue;	
};
queue<node>p; 
int bfs(int x,int y)
{
	cnt=6;
	p.push((node){x,y,1,6});
	a[x][y]=0;
	while(!p.empty())
	{
		node t=p.front();
		p.pop();
		for(int i=1;i<4;i++)
		{
			x=dx[i]+x;
			y=y+dy[i];
			if(x<0||y<0||x>=n||y>=m)
				continue;
			if(a[x][y]==0)
			{
				if(t.xue==0)
					return -1;
				else
					p.push((node){x,y,t.step+1,cnt-1});
				cnt-=1;
			}
			if(a[x][y]==1)
			{
				if(t.xue==0)
					return -1;
				else
					p.push((node){x,y,t.step+1,cnt-1});
				cnt-=1;
			}
			if(a[x][y]==2)
			{
				if(t.xue==0)
					return -1;
				else
					p.push((node){x,y,t.step+1,cnt-1});
				cnt-=1;
			}
			if(a[x][y]==3)
			{
				if(t.xue==0)
					return -1;
				else
					return t.step+1;
			}
			if(a[x][y]==4)
			{
				if(t.xue==0)
					return -1;
				else
					p.push((node){x,y,t.step+1,cnt+1});
				cnt+=1;
			}
		}
	}
	return -1;
}
int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			if(a[i][j]==2)
			{
				sx=i,sy=j;
			}
			else if(a[i][j]==3)
			{
				xx=i;yy=j;
			}
		}
	}
	cout<<bfs(sx,sy)<<endl;
	return 0;
}
2022/4/22 17:05
加载中...