80求助

P1746 离开中山路

tuzhewen @ 2019-06-22 21:26:11

#include<bits/stdc++.h>
using namespace std;
int n;
char a[1005][1005];
int sx,sy,fx,fy,ans[1005][1005];
int dir[4][2]={1,0,0,1,-1,0,0,-1};
struct node{
    int x,y;
};
void bfs(int x,int y)
{
    ans[x][y]=0;
    queue <node> q;
    q.push(node{x,y});
    while(!q.empty())
    {
        node u=q.front();
        q.pop();
        for(int i=0;i<4;i++)
        {
            int nx=u.x+dir[i][0];
            int ny=u.y+dir[i][1]; 
            if(nx>=1 && nx<=n && ny>=1 && ny<=n && ans[nx][ny]==-1)
            {
                ans[nx][ny]=ans[u.x][u.y]+1;
                q.push(node{nx,ny});
            }
        }
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cin>>a[i][j];
        }
    }
    cin>>sx>>sy>>fx>>fy;
    memset(ans,-1,sizeof(ans));
    bfs(sx,sy);
    cout<<ans[fx][fy]<<endl;
    return 0;
}

点3和点8WA了


by 幻之陨梦 @ 2019-06-22 21:34:02

@tuzhewen AC代码

#include<bits/stdc++.h>
using namespace std;
int n,ex,ey;
int dx[]={0,1,0,-1};
int dy[]={1,0,-1,0};
char dt[1001][1001];
struct node
{
    int x,y,s;
};
queue<node>q;
void bfs(int x,int y)
{
    node l,t;
    l.x=x;
    l.y=y;
    l.s=0;
    q.push(l);
    while(q.size())
    {
        t=q.front();
        for(int i=0;i<4;i++)
        {
            int tx=t.x+dx[i];
            int ty=t.y+dy[i];
            if(dt[tx][ty]=='0'&&tx>0&&tx<=n&&ty>0&&ty<=n)
            {
                node z;
                z.x=tx;
                z.y=ty;
                z.s=t.s+1;
                q.push(z);
                if(tx==ex&&ty==ey) printf("%d",z.s);
                dt[tx][ty]='1';
            }
        }
        q.pop();
    }
}
int main(void)
{
    int sx,sy;
    scanf("%d",&n);
    for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>dt[i][j];
    scanf("%d%d%d%d",&sx,&sy,&ex,&ey);
    bfs(sx,sy);
}

by tuzhewen @ 2019-06-23 12:15:10

@ZhanLang 已经AC了,谢谢QWQ


by 小资情调 @ 2019-08-25 10:34:16

@tuzhewen 请问你的失误原因在哪

我好像和你遇到了一样的问题


by tuzhewen @ 2019-08-25 21:01:32

@小资情调 这不是很早的事情了吗


by tuzhewen @ 2019-08-25 21:04:11

#include<bits/stdc++.h>
using namespace std;
int n;
char a[1005][1005];
int sx,sy,fx,fy,ans[1005][1005];
int dir[4][2]={1,0,0,1,-1,0,0,-1};
struct node{
    int x,y;
};
void bfs(int x,int y)
{
    ans[x][y]=0;
    queue <node> q;
    q.push(node{x,y});
    while(!q.empty())
    {
        node u=q.front();
        q.pop();
        for(int i=0;i<4;i++)
        {
            int nx=u.x+dir[i][0];
            int ny=u.y+dir[i][1]; 
            if(nx>=1 && nx<=n && ny>=1 && ny<=n && ans[nx][ny]==-1 && a[nx][ny]=='0')
            {
                ans[nx][ny]=ans[u.x][u.y]+1;
                q.push(node{nx,ny});
            }
        }
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
        {
            cin>>a[i][j];
        }
    }
    cin>>sx>>sy>>fx>>fy;
    memset(ans,-1,sizeof(ans));
    bfs(sx,sy);
    cout<<ans[fx][fy]<<endl; 
    return 0;
}

@小资情调 ACcode


by tuzhewen @ 2019-08-25 21:04:43

您自己对比一下吧


by 小资情调 @ 2019-08-25 21:13:58

谢谢,我也看到错误了


|