搜索题

Posted w-w-t

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索题相关的知识,希望对你有一定的参考价值。

1. POJ-1321

在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,
请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。

初始想法(wa

book[MA]//该行是否放棋子
单纯考虑在n行中取k行放棋子,以为就是一个组合问题,题意没理解就做了。
没有考虑若一行有两个'#'位置的情况,所以应该双层for循环判断每一个位置是否为'#'就好了。
for(int j=i;j<n;j++)
    for(int t=0;t<n;t++)
        if(book[j]==0&&a[j][t]=='#'){
      
        }

第二次(wa

没有考虑列的问题,大失误。加一个row[MA]存各列的状态

第三次(ac

#include<iostream>
#include<cstring>
using namespace std;
const int MA=10;
int n,k;
long long sum;
char a[MA][MA];
int book[MA];//这行是否放置棋子 
int row[MA];

void dfs(int i,int m){//第m个棋子放在 i 到 n-1 的任一满足条件行  
    if(m==k+1){
        sum++;
        return ;
    }
    for(int j=i;j<n;j++){
        for(int t=0;t<n;t++){
            if(book[j]==0&&a[j][t]=='#'&&row[t]==0){
                row[t]=1;
                book[j]=1;
                dfs(j+1,m+1);
                book[j]=0;
                row[t]=0;
            }
        }
    }
}
int main(){
    while(cin>>n>>k){
        if(n==-1&&k==-1)break;
        memset(book,0,sizeof(book));
        memset(row,0,sizeof(row));
        sum=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                cin>>a[i][j];
            }
        }
        dfs(0,1);
        cout<<sum<<endl;
    }
    return 0;
}

以上是关于搜索题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BottomNavigationView 的片段上打开搜索界面?

26个jQuery代码片段使用技巧

《安富莱嵌入式周报》第279期:强劲的代码片段搜索工具,卡内基梅隆大学安全可靠C编码标准,Nordic发布双频WiFi6 nRF7002芯片

#VSCode保存插件配置并使用 gist 管理代码片段

架构丰富的代码片段也应该用于产品列表吗?

Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段