我炸了。

P1141 01迷宫

Miracle_InDream @ 2024-01-13 23:17:14

#include<bits/stdc++.h>
using namespace std;
long long n,m;
char mp[1005][1005];
int vis[1005][1005];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
long long a,b;
struct node
{
    long long x;
    long long y;
    long long step;
};
queue<node> q;
node s;
long long step0;
void bfs()
{
    s.x=a-1;
    s.y=b-1;
    s.step=1;
    q.push(s);
    vis[s.x][s.y]=1;
    while(!q.empty())
    {
        node tmp=q.front();
        step0=tmp.step;
        q.pop();
        if(vis[tmp.x][tmp.y]==1)
        {
            continue;
        }
        vis[tmp.x][tmp.y]=1;
        for(int i=0;i<4;i++)
        {
            node a=tmp;
            a.x+=dx[i];
            a.y+=dy[i];
            a.step++;
            if(mp[tmp.x][tmp.y]=='1'&&vis[a.x][a.y]==0)
            {
                if(mp[a.x][a.y]=='0')
                {
                    q.push(a);
                }
            }
            else
            {
                if(mp[a.x][a.y]=='1')
                {
                    q.push(a);
                }
            }
        }
    }
}
int main()
{
    cin>>n>>m;
    for(long long i=0;i<n;i++)
    {
        for(long long j=0;j<n;j++)
        {
            cin>>mp[i][j];
        }
    }
    for(long long i=0;i<m;i++)
    {
        cin>>a>>b;
        bfs();
        cout<<step0<<endl;
    }
    return 0;
}

by Miracle_InDream @ 2024-01-13 23:29:32

经过ISU152_YYDS的犇犇提示后:

#include<bits/stdc++.h>
using namespace std;
long long n,m;
char mp[1005][1005];
int vis[1005][1005];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
long long a,b;
struct node
{
    long long x;
    long long y;
    long long step;
};
queue<node> q;
node s;
long long step0;
void bfs()
{
    s.x=a-1;
    s.y=b-1;
    s.step=1;
    q.push(s);
    vis[s.x][s.y]=1;
    while(!q.empty())
    {
        node tmp=q.front();
        q.pop();
        for(int i=0;i<4;i++)
        {
            node a=tmp;
            a.x+=dx[i];
            a.y+=dy[i];
            a.step++;
            if(mp[tmp.x][tmp.y]=='1'&&vis[a.x][a.y]==0)
            {
                if(mp[a.x][a.y]=='0')
                {
                    q.push(a);
                    step0=a.step;
                    vis[a.x][a.y]=1;
                }
            }
            else
            {
                if(mp[a.x][a.y]=='1')
                {
                    q.push(a);
                    step0=a.step;
                    vis[a.x][a.y]=1;
                }
            }
        }
    }
}
int main()
{
    cin>>n>>m;
    for(long long i=0;i<n;i++)
    {
        for(long long j=0;j<n;j++)
        {
            cin>>mp[i][j];
        }
    }
    for(long long i=0;i<m;i++)
    {
        memset(vis,0,sizeof(vis));
        cin>>a>>b;
        bfs();
        cout<<step0<<endl;
    }
    return 0;
}

这这这……


by 2011FYCCCTA @ 2024-01-14 06:33:32

@shooting__star

else 改为 else if (vis[a.x][a.y]==0)


by Miracle_InDream @ 2024-01-14 07:51:55

#include<bits/stdc++.h>
using namespace std;
long long n,m;
char mp[1005][1005];
int vis[1005][1005];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
long long a,b;
struct node
{
    long long x;
    long long y;
    long long step;
};
queue<node> q;
node s;
long long step0;
void bfs()
{
    s.x=a-1;
    s.y=b-1;
    s.step=1;
    q.push(s);
    vis[s.x][s.y]=1;
    while(!q.empty())
    {
        node tmp=q.front();
        q.pop();
        for(int i=0;i<4;i++)
        {
            node a=tmp;
            a.x+=dx[i];
            a.y+=dy[i];
            a.step++;
            if(mp[tmp.x][tmp.y]=='1'&&vis[a.x][a.y]==0)
            {
                if(mp[a.x][a.y]=='0')
                {
                    q.push(a);
                    step0=a.step;
                    vis[a.x][a.y]=1;
                }
            }
            else if(vis[a.x][a.y]==0) 
            {
                if(mp[a.x][a.y]=='1')
                {
                    q.push(a);
                    step0=a.step;
                    vis[a.x][a.y]=1;
                }
            }
        }
    }
}
int main()
{
    cin>>n>>m;
    for(long long i=0;i<n;i++)
    {
        for(long long j=0;j<n;j++)
        {
            cin>>mp[i][j];
        }
    }
    for(long long i=0;i<m;i++)
    {
        memset(vis,0,sizeof(vis));
        cin>>a>>b;
        bfs();
        cout<<step0<<endl;
    }
    return 0;
}

|