问题标题: 1257   迷宫寻宝

2
0
已解决
张瑀涵
张瑀涵
高级光能
高级光能

#include<iostream>
#include<cstring>
using namespace std;
int n,mini=100000000,dir[4][2]={{-1,0},{0,1},{1,0},{0,-1}},sx,sy,fx,fy,a[100][100]={{1,1,1,1,1,1,1,1,1},{1,0,0,1,0,0,1,0,1},{1,0,0,1,1,0,0,0,1},{1,0,0,1,1,0,0,0,1},{1,0,0,0,0,1,0,0,1},{1,1,0,1,0,1,0,0,1},{1,1,0,1,0,1,0,0,1},{1,1,0,1,0,0,0,0,1},{1,1,1,1,1,1,1,1,1}};
bool flag[100][100];
void search(int c,int r,int count)
{
    if(c==fx&&r==fy)
    {
        if(mini>count)
            mini=count;
        return ;
    }
    else
    {
        flag[c][r]=true;
        for(int i=0;i<4;i++)
        {
            int nextc=c+dir[i][0],nextr=r+dir[i][1];
            if(nextc<9&&nextc>=0&&nextr<9&&nextr>=0&&!flag[nextc][nextr]&&a[nextc][nextr]==0)
            {
                search(nextc,nextr,count+1);
            }
        }
        flag[c][r]=false;
    }
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        cin>>sx>>sy>>fx>>fy;
        mini=10000000;
        search(sx,sy,0);
        cout<<mini<<endl;
    }
    return 0;
}


0
1
张裕博
张裕博
初级守护
初级守护

把flag[c][r]=true;删去,改成flag[nextc][nextr]=true;并放在search(nextc,nextr,count+1);的前一行

把flag[c][r]=false;删去,改成flag[nextc][nextr]=false;并放在search(nextc,nextr,count+1)的后一行

0
0
我要回答