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;
  }
}

 

 

posted @ 2013-09-28 20:02  龙城星  阅读(168)  评论(0编辑  收藏  举报