棋盘问题---poj1321(dfs)

http://poj.org/problem?id=1321

由于搜索是原来写的,而集训的时候没来所以只能现在补补咯-_-

简单的深搜

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stdlib.h>
#define N 10
#define INF 0xfffffff
#include<math.h>
#include<iostream>
using namespace std;

int n,ans,k,num,vis[N],sx,sy;
char maps[N][N];

void dfs(int m)//m是第几行;
{
    int i;
    if(num==k)
    {
        ans++;
        return ;
    }
    if(m>=n)
        return ;
    for(i=0;i<n;i++)
    {
        if(vis[i]==0&&maps[m][i]==‘#‘)
        {
            num++;
            vis[i]=1;
            dfs(m+1);
            vis[i]=0;
            num--;
        }
    }
    dfs(m+1);
}

int main()
{
    while(scanf("%d %d",&n,&k),k!=-1||n!=-1)
    {
        memset(vis,0,sizeof(vis));
        int wall=0;
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                cin>>maps[i][j];
            }
        }
        ans=num=0;
        dfs(0);
        printf("%d\n",ans);
    }
    return 0;
}
时间: 2024-12-15 05:17:06

棋盘问题---poj1321(dfs)的相关文章

A - 棋盘问题 POJ1321 DFS

A - 棋盘问题 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Status Practice POJ 1321 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. Input 输入含有多组测试数据. 每组数据的第一行是

棋盘问题 POJ-1321 DFS

题目大意 在n*n的不规则的棋盘上摆放k枚棋子,要求每行和每列上只能有一枚棋子. 思路 和八皇后问题类似,只不过这个问题不一定是一行摆放一个.因此dfs的时候要多用一个参数来表示当前搜索的行数. 题解 1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 5 int n,k,ans; 6 char a[10][10]; 7 bool vis[10]; 8 9 void dfs(int num, int

poj1321——dfs回溯

POJ 1321  DFS回溯+递归枚举 棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 24813   Accepted: 12261 Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. Input 输入含有多组测试数据. 每组数据的第一行

【搜索】棋盘问题(DFS)

Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. Input 输入含有多组测试数据. 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目. n <= 8 , k <= n 当为-1 -1时表示输入结束. 随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示

poj 1321 棋盘问题 【DFS】

题意:... 策略:深搜. 仔细分析我们发现,我们只需要对列进行标记,对于行我们考虑放棋子还是不放就行了. 代码: #include<stdio.h> #include<string.h> char s[10][10]; int n, m; int vis[10]; int ans; void dfs(int cur, int step) { if(step == m){ ans ++; return; } if(cur > n-1) return ; int i, j; f

poj1321 棋盘问题(DFS)

题目链接 http://poj.org/problem?id=1321 题意 给定一块棋盘(棋盘可能是不规则的),有k个相同棋子,将k个棋子摆放在棋盘上,使得任意两个棋子不同行,不同列,求有多少种不同的摆法. 思路 此题和八皇后问题很像,需要注意摆放完毕后要恢复现场,便于下一次摆放. 代码 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 c

poj1321棋盘问题(dfs+摆放问题)

在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. Input 输入含有多组测试数据. 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目. n <= 8 , k <= n 当为-1 -1时表示输入结束. 随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白

棋盘问题——POJ1321

棋盘问题--深度优先搜索 题目描述: 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. 详情请看poj1321:  https://vjudge.net/problem/POJ-1321#author=0 解题思路: 按行进行深搜,总的方案数 = 选取该行中某位置的方案数 + 不选取该行位置的方案数,直至棋子数位0或达到最后一行 代码如下: 1

【POJ - 1321】棋盘问题 (dfs)

棋盘问题 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C. Input 输入含有多组测试数据. 每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目. n <= 8 , k <= n 当为-1 -1时表示输入结束. 随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, .