poj1321
来源:互联网 发布:网络大电影众筹平台 编辑:程序博客网 时间:2024/06/06 18:24
涉及算法:深度搜索
题目大意:在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。棋盘有空白区域和棋盘区域,棋子只能放在棋盘区域
代码如下:
题目大意:在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。棋盘有空白区域和棋盘区域,棋子只能放在棋盘区域
代码如下:
package com.solo.dfs;import java.util.Scanner;public class Main_1321 {static int a,b;//a行a列的棋盘,棋子static int[][] chess;//chess[i][j]:的值为0表示可以放棋子,值为1表示不可以放棋子static int[] used;//used[i]:值为1表示,第i列已经放了棋子static int mCount;//方案的次数public static void main(String[] args) {Scanner in=new Scanner(System.in);a=in.nextInt();b=in.nextInt();String s;while(a!=-1 && b!=-1){mCount=0;used=new int[a+1];chess=new int[a+1][a+1];for (int i = 1; i <= a; i++){s=in.next();for (int j = 1; j <= a; j++){if(s.charAt(j-1)=='#'){chess[i][j]=0;}else{chess[i][j]=1;}}}dfs(1, b);System.out.println(mCount);a=in.nextInt();b=in.nextInt();}}//dfs不可能会搜索到出现过的情况static void dfs(int curRow,int resNum)//resNum:剩余棋子数目,curRow:当前行{if(resNum==0){mCount++;return;}if(a-curRow+1<resNum) return;for(int i=curRow;i<=a;i++){for(int j=1;j<=a;j++){if(used[j]==1 || chess[i][j]==1) continue;used[j]=1;dfs(i+1, resNum-1);used[j]=0;}}}}
0 0
- poj1321
- POJ1321
- poj1321
- poj1321
- poj1321
- POJ1321
- POJ1321
- poj1321
- poj1321
- POJ1321
- poj1321
- poj1321
- poj1321
- poj1321
- POJ1321
- poj1321
- poj1321
- poj1321
- STL set的总结
- 【Java】Java中多态的实现
- 自定义View2 ,自定义路径,bitmap图像处理(缩放,翻转之类,还有Matrix和Mode)
- CrossAPP第一课
- 左值的定义和i++,++i
- poj1321
- hdu5128The E-pang Palace dfs暴力
- SINGLE NUMBER I & II & III
- C++面试题
- 看《暗杀》全智贤 去杀人都能美成神
- iOS国际化---跟随系统语言
- hdu5444 Elven Postman 二叉树建树
- CodeVS1394 数字串
- java__io__序列流(合并MP3)和对象序列化