zoukankan      html  css  js  c++  java
  • 搜索系列——1321 棋盘问题

    棋盘问题

    Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 20000/10000K (Java/Other)
    Total Submission(s) : 11   Accepted Submission(s) : 4
    Problem Description
    在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
     


    Input
    输入含有多组测试数据。
    每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
    当为-1 -1时表示输入结束。
    随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。
     


    Output
    对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。
     


    Sample Input
    2 1 #. .# 4 4 ...# ..#. .#.. #... -1 -1
     


    Sample Output
    2 1
     


    Source
    PKU


    最近研究搜索算法,这题是dfs的典型题,人笨,研究了好久,参考了网上的解题报告,终于给A掉了。。。

    AC代码如下:

    #include<stdio.h>
    
    int n, k, c[8], r[8], p[8][8], sum;
    long way;
    void search(int cur)
    {
    	int i, j;
    	if (sum == k)
    	{
    		way++;
    		return;
    	}
    	if (cur == n)
    		return;
    	for (j = 0; j < n; j++)
    	{
    		if (p[cur][j] && r[cur] && c[j])
    		{
    			r[cur] = 0;
    			c[j] = 0;
    			sum++;
    			search(cur + 1);
    			sum--;
    			r[cur] = 1;
    			c[j] = 1;
    		}
    	}
    	search(cur + 1);
    	return;
    }
    int main()
    {
    	scanf("%d%d", &n, &k);
    	for (; n != -1 || k != -1; scanf("%d%d", &n, &k))
    	{
    		getchar();
    		for (int i = 0; i < n; i++)
    		{
    			r[i] = 1;
    			c[i] = 1;
    			for (int j = 0; j < n; j++)
    				if (getchar() == '#')
    					p[i][j] = 1;
    				else
    					p[i][j] = 0;
    			getchar();
    		}
    		way = 0;
    		sum = 0;
    		search(0);
    		printf("%ld\n", way);
    	}
    	return 0;
    }


    学习总是先从模仿开始,因为我是个蒻菜。。。


  • 相关阅读:
    vuex2 mapActions 报错 `unknown action type: xxxx`
    IE报vuex requires a Promise polyfill in this browser问题解决
    vue路由懒加载
    vue-router各个属性的作用及用法
    JS实现继承的几种方法
    ES6学习笔记--promise对象
    jQuery--data()方法
    原生js实现二级联动下拉列表菜单
    sql server中部分函数功能详解
    js中字符串转换为数值的两种方法的区别
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3013917.html
Copyright © 2011-2022 走看看