poj 1321(dfs)

来源:互联网 发布:数据质量控制系统 编辑:程序博客网 时间:2024/05/29 08:38

题意:有一个n*n的矩阵,’#’处可以放棋子,给出k个棋子要放入棋盘中,棋盘的上的棋子任意两个不能在同一行和同一列,问几种放法。
题解:棋盘8*8,暴力的dfs就可以。

#include <stdio.h>#include <string.h>#include <vector>using namespace std;const int N = 10;char str[N];int vis[N], n, k, res;vector<int> g[N];void dfs(int cur, int cnt) {    if (cnt == k) {        res++;        return;    }    if (cur == n)        return;    dfs(cur + 1, cnt);    for (int i = 0; i < g[cur].size(); i++) {        int c = g[cur][i];        if (!vis[c]) {            vis[c] = 1;            dfs(cur + 1, cnt + 1);            vis[c] = 0;        }    }}int main() {    while (scanf("%d%d", &n, &k) && n != -1) {        for (int i = 0; i < n; i++) {            g[i].clear();            scanf("%s", str);            for (int j = 0; j < n; j++)                if (str[j] == '#')                    g[i].push_back(j);          }        res = 0;        dfs(0, 0);        printf("%d\n", res);    }    return 0;}
0 0
原创粉丝点击