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;
    }

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


  • 相关阅读:
    日期格式
    典型的三行两列居中高度自适应div+css布局
    转javascript倒计时例子
    javascript encode64 decode64
    【转】Linux下 zip 和 unzip的用法
    【转】matlab reshape使用
    【转】MySQL修改root密码的各种方法整理
    【转】汇编语言里 eax, ebx, ecx, edx, esi, edi, ebp, esp
    [转]ExtJS xtype class对照表
    vc 字符串转时间,并取时间差
  • 原文地址:https://www.cnblogs.com/java20130723/p/3212179.html
Copyright © 2011-2022 走看看