1321棋盘问题
错了好几次,
for(j=1;j<=n;j++)
for(i=1;i<=n;i++){
if(set[i]==0&&map[a+j][i]=='#'&&a+j<=n){
dfs(a+j,i,num);
}
}
一开始我没有考虑到有可能它的点又可以能中间空掉,所以从0到n一直找
比如这个数据他就会出错
2 2
..
##
经过修改,这个数据他也会通过
我的代码
#include "iostream" #include "string.h" #include "algorithm" using namespace std; int set[9],num,step,n,m; char map[10][10]; void dfs(int a,int b,int num){ int i,j; set[b]=1; if(num==m){step++;num=-1;} num++; for(j=1;j<=n;j++) for(i=1;i<=n;i++){ if(set[i]==0&&map[a+j][i]=='#'&&a+j<=n){ dfs(a+j,i,num); } } set[b]=0; } int main(){ int i,j; char list[10]; while(cin>>n>>m){ step=0;num=0; if(n==-1&&m==-1)break; for(i=1;i<=n;i++){ cin>>list; for(j=0;j<n;j++){ map[i][j+1]=list[j]; } } memset(set,0,sizeof(set)); dfs(0,0,0); cout<<step<<endl; } }