50pts 5WA
查看原帖
50pts 5WA
952663
fjh0531楼主2023/6/5 16:59
10 10
####.#.#.#
..##...#..
#.########
.S######..
########.#
########.#
.....###..
####.#####
####.#...#
####.#.#.#
#include <bits/stdc++.h>
using namespace std;
struct node
{
    int x,y,tx,ty;
} d;
struct mh
{
    int x,y;
}cxk[5][1510];//1上2下3左4右
int p(int lfd){
    if(lfd==1)
        return 1;
    else return 2;
}
int pd(int rick){
	if(rick==1||rick==3) return 1;
	else return -1;
}
int m,n,x,y,xs,ys,xt,yt,xx,yy;
string a;
queue<node> q;

int movex[5]= {0,1,0,-1,0};
int movey[5]= {0,0,1,0,-1};
int mapp[1510][1510];
int book[1510][1510];
int vis[1510][3];//1横2竖
bool ans=false;
#define debug cout<<"debug"<<endl;
void dabfs(int xn,int yn,int tx,int ty)//dfs and bfs
{
    if(ans==false)
    {
        book[xn][yn]=1;
        if((xn==1||xn==n)&&mapp[1][yn]==0&&mapp[n][yn]==0)
        {
			//debug
            if((cxk[2+p(xn)][yn].x!=tx)||(cxk[2+p(xn)][yn].y!=ty))
            {
                if(vis[yn][2]==0)
                {
                    //cout<<xn<<" "<<yn<<"已走到边界并记录"<<2+p(xn)<<endl;
                    cxk[2+p(xn)][yn].x=tx;
					cxk[2+(3-p(xn))][yn].x=tx+pd(5-p(xn));
                    cxk[2+p(xn)][yn].y=ty;
				    cxk[2+(3-p(xn))][yn].y=ty;
					//cout<<2+p(xn)<<" "<<yn<<" "<<tx<<" "<<ty<<endl;
					//cout<<5-p(xn)<<" "<<yn<<" "<<tx+pd(5-p(xn))<<" "<<ty<<endl;
                    vis[yn][2]=1;
                    q.push({xn,yn,tx,ty});

                }
                else
				{
					ans=true;
					//cout<<"get";
				}
            }
            else{

                //cout<<cxk[2+p(xn)][yn].x<<" "<<tx<<"ddd"<<cxk[2+p(xn)][yn].y<<" "<<ty<<" "<<xn<<" "<<yn<<endl;

            }

        }
        if((yn==1||yn==m)&&mapp[xn][1]==0&&mapp[xn][m]==0)
        {
			//debug
            if((cxk[0+p(yn)][xn].x!=tx)||(cxk[0+p(yn)][xn].y!=ty))
            {
                if(vis[xn][1]==0)
                {
                    //cout<<xn<<" "<<yn<<"已走到边界并记录"<<0+p(yn)<<endl;
                    cxk[0+p(yn)][xn].x=tx;
					cxk[0+(3-p(yn))][xn].x=tx;
                    cxk[0+p(yn)][xn].y=ty;
					cxk[0+(3-p(yn))][xn].y=ty+pd(5-p(yn));
					//cout<<0+p(yn)<<" "<<xn<<" "<<tx<<" "<<ty<<endl;
					//cout<<3-p(yn)<<" "<<xn<<" "<<tx<<" "<<ty+pd(5-p(yn))<<endl;
                    vis[xn][1]=1;
                    q.push({xn,yn,tx,ty});

                }
                else
				{
					ans=true;
					//cout<<"get";
				}
            }
            else{

                //cout<<cxk[0+p(yn)][xn].x<<" "<<tx<<"ddd"<<cxk[0+p(yn)][xn].y<<" "<<ty<<" "<<xn<<" "<<yn<<endl;

            }

        }
        for(int i=1; i<=4; i++)
        {
            xt=xn+movex[i];
            yt=yn+movey[i];

            if(mapp[xt][yt]==0&&book[xt][yt]==0)
            {
				//cout<<xt<<" "<<yt<<"被经过了"<<endl;
                dabfs(xt,yt,tx,ty);
            }
        }
    }
}
int main()
{
    while(cin>>m>>n)
    {
        while(!q.empty()) q.pop();
        memset(mapp,1,sizeof(mapp));
        memset(book,0,sizeof(book));
        memset(vis,0,sizeof(vis));
        memset(cxk,INT_MAX,sizeof(cxk));
        ans=false;
        for(int y=1; y<=m; y++)
        {
            cin>>a;
            for(int x=0; x<n; x++)
            {

                if(a[x]=='.') mapp[x+1][y]=0;
                else if(a[x]=='#') mapp[x+1][y]=1;
                else
                {
                    mapp[x+1][y]=0;
                    xs=x+1;
                    ys=y;
                }

            }
        }
        dabfs(xs,ys,0,0);
        while(!q.empty()&&ans==false)
        {
            d=q.front();
            q.pop();
            //cout<<d.x<<" "<<d.y<<"进行了传送"<<endl;
            if(d.x==1)
            {
				//cout<<"于"<<n<<" "<<d.y<<"在map"<<d.tx-1<<" "<<d.ty<<"再次搜索";
                dabfs(n,d.y,d.tx-1,d.ty);

            }
            if(d.x==n)
            {
				//cout<<"于"<<1<<" "<<d.y<<"在map"<<d.tx+1<<" "<<d.ty<<"再次搜索";
                dabfs(1,d.y,d.tx+1,d.ty);
            }
            if(d.y==1)
            {
				//cout<<"于"<<d.x<<" "<<m<<"在map"<<d.tx<<" "<<d.ty-1<<"再次搜索";
                dabfs(d.x,m,d.tx,d.ty-1);
            }
            if(d.y==m)
            {
				//cout<<"于"<<d.x<<" "<<1<<"在map"<<d.tx<<" "<<d.ty+1<<"再次搜索";
                dabfs(d.x,1,d.tx,d.ty+1);
            }
        }
        if(ans==true)
            cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
    }
	return 0;
}

上面那个数据死活过不去 找了半个月没找到bug在哪 求救qwq

2023/6/5 16:59
加载中...