问题标题: 请问这段P2085的代码为什么连样例都过不去

0
0
已解决
李庚午
李庚午
中级守护
中级守护
//code by LG♂W2016B02
#include<bits/stdc++.h>
using namespace std;
struct point
{
    int x;int y;int step=0;
};
bool vis[2][105][105];
int dx[13];
int dy[13];
point a,b;
int bfs(int mode,int x,int y)
{
    queue<point>team;
    point t;
    t.x=x;t.y=y;t.step=0;
    while(!team.empty())
    {
        point p=team.front();
        team.pop();
        if (p.x==1&&p.y==1) return p.step;
        for(int i=1;i<=12;i++)
        {
            if(p.x+dx[i]>0&&p.x+dx[i]<=100&&p.y+dy[i]>0&&p.y+dy[i]<=100&&!vis[mode][p.x+dx[i]][p.y+dy[i]])
            {
                point u;
                u.x=p.x+dx[i];
                u.y=p.y+dy[i];
                u.step=p.step+1;
                vis[mode][u.x][u.y]=true;
                team.push(u);
            }
        }
    }
}
int main()
{
    dx[1]=2;dx[2]=2;dx[3]=2;dx[4]=2;dx[5]=-2;dx[6]=-2;dx[7]=-2;dx[8]=-2;dx[9]=1;dx[10]=1;dx[11]=-1;dx[12]=-1;
    dy[1]=1;dy[2]=-1;dy[3]=2;dy[4]=-2;dy[5]=1;dy[6]=-1;dy[7]=2;dy[8]=-2;dy[9]=2;dy[10]=-2;dy[11]=2;dy[12]=-2;
    memset(vis,false,sizeof(vis));
    cin>>a.x>>a.y;
    int ans1=bfs(1,a.x,a.y);
    cin>>b.x>>b.y;
    int ans2=bfs(2,b.x,b.y);
    cout<<ans1<<endl<<ans2;
}

 


1
已采纳
洪朝阳
洪朝阳
修练者
修练者

貌似要两次初始化

2
1
1
周思睿
周思睿
新手光能
新手光能

大神的世界我们不懂。。。

0
0
李庚午
李庚午
中级守护
中级守护

加上PUSH操作之后得50分,RE五个点,仍然求解

//code by LG♂W2016B02
#include<bits/stdc++.h>
using namespace std;
struct point
{
    int x;int y;int step=0;
};
bool vis[2][105][105];
int dx[13];
int dy[13];
point a,b;
int bfs(int mode,int x,int y)
{
    queue<point>team;
    point t;
    t.x=x;t.y=y;t.step=0;
    team.push(t);
    while(!team.empty())
    {
        point p=team.front();
        team.pop();
        if (p.x==1&&p.y==1) return p.step;
        for(int i=1;i<=12;i++)
        {
            if(p.x+dx[i]>0&&p.x+dx[i]<=100&&p.y+dy[i]>0&&p.y+dy[i]<=100&&!vis[mode][p.x+dx[i]][p.y+dy[i]])
            {
                point u;
                u.x=p.x+dx[i];
                u.y=p.y+dy[i];
                u.step=p.step+1;
                vis[mode][u.x][u.y]=true;
                team.push(u);
            }
        }
    }
}
int main()
{
    dx[1]=2;dx[2]=2;dx[3]=2;dx[4]=2;dx[5]=-2;dx[6]=-2;dx[7]=-2;dx[8]=-2;dx[9]=1;dx[10]=1;dx[11]=-1;dx[12]=-1;
    dy[1]=1;dy[2]=-1;dy[3]=2;dy[4]=-2;dy[5]=1;dy[6]=-1;dy[7]=2;dy[8]=-2;dy[9]=2;dy[10]=-2;dy[11]=2;dy[12]=-2;
    memset(vis,false,sizeof(vis));
    cin>>a.x>>a.y;
    int ans1=bfs(1,a.x,a.y);
    cin>>b.x>>b.y;
    int ans2=bfs(2,b.x,b.y);
    cout<<ans1<<endl<<ans2;
    return 0;
}

 

0
葛新
葛新
资深守护
资深守护

第二次搜索之前也需要初始化。

memset(vis,false,sizeof(vis));

0
李映谊
李映谊
高级守护
高级守护

头文件最好换下#include<bits/stdc++.h>

0
0
0
我要回答