类似八皇后算法

 #include <iostream.h>
 using namespace std;
 
 void tree_search(string max_string,int length,int len, int pos_x, int pos_y, int &count);
 void input_string();
 int n;
 char **matrix=0;
 
 int main() {
  int i,j,total=0,length=0;
  string des_str;
  
  input_string();
  cout<<"input the string to compare! des_str:";
  cin>>des_str;
  length=des_str.length();
  
  for(i=0; i<n; i++){
   for(j=0; j<n; j++){
    tree_search(des_str,length,0,i,j,total);
   }
  }
  
  cout<<"seach des_str's "<<des_str<<" total ways is "<<total;
  return 0;
 }
 
 void input_string(){
  int i,j;
  cout<<"input the layer of matrix!n:";
  cin>>n;
  
  char letter[26] = {'A','B','C','D','E','F','G','H','I','J','K','L','M'
      ,'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
  
  matrix=new char *[n];
  for(i=0; i<n; i++){
   matrix[i]=new char[n];
  }
  
  cout<<"the n! matrix is:"<<endl;
  srand((unsigned) time(NULL));
  for(i=0; i<n; i++){
   for(j=0; j<n; j++){
    matrix[i][j] = letter[rand()%26];
    cout<<matrix[i][j]<<" ";
   }
   cout<<endl;
  }
 }
 
 void tree_search(string max_string,int length,int len, int pos_x, int pos_y, int &count){
  if(0 <= pos_x && pos_x <= n-1 && 0 <= pos_y && pos_y <= n-1){
   if(len == length-1 && matrix[pos_x][pos_y] == max_string.at(len)){
    count++;
   }
   else if(matrix[pos_x][pos_y] == max_string.at(len)){
    tree_search(max_string, length, len+1, pos_x, pos_y-1, count);
    
    tree_search(max_string, length, len+1, pos_x, pos_y+1, count);
    
    tree_search(max_string, length, len+1, pos_x+1, pos_y-1, count);
    
    tree_search(max_string, length, len+1, pos_x+1, pos_y, count);
    
    tree_search(max_string, length, len+1, pos_x+1, pos_y+1, count);
    
    tree_search(max_string, length, len+1, pos_x-1, pos_y-1, count);
    
    tree_search(max_string, length, len+1, pos_x-1, pos_y, count);
    
    tree_search(max_string, length, len+1, pos_x-1, pos_y+1, count);
   }
  }
 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Python 中,类似八皇后问题的经典问题是 N 皇后问题。这个问题是要在一个 N x N 的棋盘上放置 N 个皇后,使得每个皇后都不能攻击到其他皇后。具体来说,皇后可以攻击同一行、同一列或同一对角线上的其他棋子。 以下是一个简单的 Python 代码,通过回溯算法解决了 N 皇后问题: ```python def solve_n_queens(n): def could_place(row, col): return not (cols[col] + hill_diagonals[row - col] + dale_diagonals[row + col]) def place_queen(row, col): queens.add((row, col)) cols[col] = 1 hill_diagonals[row - col] = 1 dale_diagonals[row + col] = 1 def remove_queen(row, col): queens.remove((row, col)) cols[col] = 0 hill_diagonals[row - col] = 0 dale_diagonals[row + col] = 0 def add_solution(): solution = [] for _, col in sorted(queens): solution.append('.' * col + 'Q' + '.' * (n - col - 1)) output.append(solution) def backtrack(row = 0): for col in range(n): if could_place(row, col): place_queen(row, col) if row + 1 == n: add_solution() else: backtrack(row + 1) remove_queen(row, col) cols = [0] * n hill_diagonals = [0] * (2 * n - 1) dale_diagonals = [0] * (2 * n - 1) queens = set() output = [] backtrack() return output ``` 这个代码中,`could_place()` 函数用于检查当前位置是否可以放置皇后。`place_queen()` 函数用于在当前位置放置皇后,并将相关的列、主对角线和副对角线标记为被占用。`remove_queen()` 函数用于移除当前位置的皇后,并将相关的标记重置。`add_solution()` 函数用于将当前的解添加到输出列表中。`backtrack()` 函数是核心回溯函数,使用递归实现,尝试在每一行中放置一个皇后。如果找到一个解,就将其添加到输出列表中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值