POJ - 1321 棋盘问题

POJ - 1321 棋盘问题

题解:DFS搜索

#include <bits/stdc++.h>
#define Zeoy std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0)
#define all(x) (x).begin(), (x).end()
#define endl '\n'
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + 7;
const double eps = 1e-9;
const int N = 2e5 + 10;
int n,k,ans;
char g[10][10];
int vis[10];                    //标记这一列有没有被访问过
void dfs(int row,int num)
{
    if (num==k)                 //已经能够摆放K个棋子了
    {
        ans++;
        return;
    }
    if (row>n)                  //如果行遍历到n了直接退出
        return;
    for (int j=1;j<=n;++j)      //遍历列
    {
        if (!vis[j])
        {
            vis[j]=1;
            dfs(row+1,num+1);   //如果找到,往下一行搜索
            vis[j]=0;
        }
    }
    dfs(row+1,num);             //从下一行为起点开始搜索
}
int main(void)
{
    Zeoy;
    int t = 1;
    // cin >> t;
    while (t--)
    {
        while (cin >> n >> k)
        {
            memset(vis,0,sizeof vis);
            if (n==-1 && k==-1)
                break;
            for (int i=1;i<=n;++i)
            {
                for (int j=1;j<=n;++j)
                    cin >> g[i][j];
            }
            ans = 0;
            dfs(1,0);
            cout << ans << endl;
        }
    }
    return 0;
}
posted @ 2023-01-09 23:19  Zeoy_kkk  阅读(19)  评论(0编辑  收藏  举报