#include<bits/stdc++.h>
using namespace std;
int dd[66],a[9][9],pp,qq,C;
int a1[8]={-1,1,-2,2,-2,2,-1,1};
int b1[8]={-2,-2,-1,-1,1,1,2,2};//顺序,决定按字典排序法找、
int display(int p,int q)
{
for(int i=1;i<=p*q;i++)
{
char z=dd[i]%10+'A'-1;
cout<<z<<dd[i]/10;
}
cout<<endl;
}
int sousuo(int aa,int bb,int z)//当前位置aa,bb,第z步
{dd[z]=aa*10+bb;a[aa][bb]=1;
if(z==pp*qq) {C=1;display(pp,qq);return 0;}
for(int i=0;i<8;i++)
{
if(a[aa+a1[i]][bb+b1[i]]==0&&C==0&&aa+a1[i]>=1&&aa+a1[i]<=pp&&bb+b1[i]>=1&&bb+b1[i]<=qq)
{
sousuo(aa+a1[i],bb+b1[i],z+1);
// cout<<aa<<" "<<bb<<" "<<z<<endl;
}
}
a[aa][bb]=0;
}
int main()
{
int T,i,j,k;
char A;
cin>>T;
for(k=1;k<=T;k++)
{C=0;
memset(a,0,sizeof(a));
cin>>pp>>qq;
cout<<"Scenario #"<<k<<":"<<endl;
for(j=1;j<=qq;j++)
for(i=1;i<=pp;i++)
{
sousuo(i,j,1);
}
if(C==0) cout<<"impossible"<<endl;
if(k!=T) cout<<endl;
}
}
下午的时候就看以前的课件,昏昏欲睡、深深感觉学的都还给了老师。。单看课件也还是有点蒙,以后还是要多刷题,刷题要及时、才能对知识点进行巩固
网站好了以后,继续做题、虽然不能下午的时候还不能交,就只找了几道以前做过的(1004,1006),这两道题比较简单、
晚上能提交后都提交了,所幸都对了,又做了1007,也是以前做过的、但是忘记怎么做了,又好好想,是广搜
题意:输入一个n,求m是n的倍数,并且只有0,1组成、从1开始入栈,依次*10和*10+1入栈,然后依次出栈,注意范围即可
做的这几个题,我知道自己的广搜比较欠缺,深搜与递归太类似,所以相对而言掌握的较好、最近这一个周,就要在广搜上下下功夫了!