高级光能
#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;
}
初级守护
把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)的后一行