放棋子
来源:互联网 发布:yum install w3m 编辑:程序博客网 时间:2024/04/27 22:16
今有 6 x 6 的棋盘格。其中某些格子已经预先放好了棋子。现在要再放上去一些,使得:每行每列都正好有3颗棋子。我们希望推算出所有可能的放法。
初始数组中,“1”表示放有棋子,“0”表示空白。
public class Test {public static int kind=0;public static int x[][] = new int[][]{{1,0,0,0,0,0},{0,0,1,0,1,0},{0,0,1,1,0,1},{0,1,0,0,1,0},{0,0,0,1,0,0},{1,0,1,0,0,1}};public static void dfs(int r,int c,int m,int n)//回溯{int row=place_row(r, m, n);if(r==m){kind++;show(m,n);}else if(row<3){for(int j=c;j<n;j++){if(x[r][j]==0 && place_col(j, m, n)) {x[r][j]=1;dfs(r,j+1,m,n);x[r][j]=0;}}}else if(row==3){dfs(r+1,0,m,n);}}public static int place_row(int row,int m,int n)//行是否能放{if(row==m) return row;int sum_row=0;for(int j=0;j<n;j++){sum_row+=x[row][j];if(sum_row>2)return 3;}return sum_row;}public static boolean place_col(int col,int m,int n)//列是否能放{int sum_col=0;for(int i=0;i<m;i++){sum_col+=x[i][col];if(sum_col>2)return false;}return true;}public static void show(int m,int n)//打印{System.out.println("kind: "+kind);for(int i=0;i<m;i++){for(int j=0;j<n;j++){System.out.printf("%3d",x[i][j]);}System.out.println();}}public static void main(String[] args){dfs(0,0,6,6);System.out.println(kind);}}
- 放棋子
- 放棋子
- 放棋子
- 放棋子
- 放棋子
- 放棋子
- 放棋子
- 放棋子--蓝桥杯
- 取放棋子问题
- BZOJ4563 [Haoi2016]放棋子
- bzoj4563【HAOI2016】放棋子
- 4563: [Haoi2016]放棋子
- BZOJ3294: [Cqoi2011]放棋子
- 【JZOJ 3892】 放棋子
- [JZOJ3892] 放棋子
- BZOJ3294: [Cqoi2011]放棋子
- BZOJ4563 [Haoi2016]放棋子
- 放棋子(代码填空)
- 字符串——Ny 308 Substring
- 数塔
- 2013 할리우드 시즌 블록버스터 20
- 英语数学符号
- 2013.04.08--2013.04.14 周计划
- 放棋子
- C语言中用strstr()和strncpy()实现split()
- 关于使用Yii框架开发时数据库增加字段后保存无效的问题
- HDU 1005 Number Sequence
- 给年轻程序员的建议
- 第一眼看:PowerPoint 2013
- linux下ftp的使用
- 学习日记-java高新技术
- Oracle数据库之SQL子查询详解