码迷,mamicode.com
首页 > 其他好文 > 详细

搜索 || DFS || POJ 1321 棋盘问题

时间:2018-02-02 23:18:20      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:问题   ios   dfs+回溯   names   col   mem   body   scan   post   

棋盘上#可以放,.不可以放,每行每列只能放一个
*解法:类似八皇后问题 dfs+回溯,考虑每一行和每一列
【【【【dfs的样子】】】】最前面写达到目标状态or不能走下去了 然后return
#include <iostream>
#include <cstdio>
using namespace std;
int n, k;
char a[11][11];
int vis[10];
int ans;
void dfs(int u, int cnt)
{
    if(cnt == k) {ans++; return;}
    if(u >= n) return;
    //在第u行放棋子
    for(int i = 0; i < n; i++)
    {
        if(!vis[i] && a[u][i] == #)//放在第i列
        {
            cnt++;
            vis[i] = 1;
            dfs(u + 1, cnt);
            cnt--;//不放在第i列
            vis[i] = 0;
        }
    }
    //在第u行不放棋子
    dfs(u + 1, cnt);
}
int main()
{
    while(1)
    {
        scanf("%d %d", &n, &k);
        if(n == -1 && k == -1) break;
        for(int i = 0; i < n; i++)
            scanf(" %s", a[i]);
        ans = 0;
        memset(vis, 0, sizeof(vis));
        dfs(0, 0);
        printf("%d\n", ans);
    }
    return 0;
}

 

搜索 || DFS || POJ 1321 棋盘问题

标签:问题   ios   dfs+回溯   names   col   mem   body   scan   post   

原文地址:https://www.cnblogs.com/pinkglightning/p/8407182.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!