当前位置:网站首页>【每日一题】棋盘问题
【每日一题】棋盘问题
2022-04-23 12:26:00 【小梁说代码】
Instruction
在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子的所有可行的摆放方案C。
Input
输入含有多组测试数据。
每组数据的第一行是两个正整数,n k,用一个空格隔开,表示了将在一个n*n的矩阵内描述棋盘,以及摆放棋子的数目。 n <= 8 , k <= n
当为-1 -1时表示输入结束。
随后的n行描述了棋盘的形状:每行有n个字符,其中 # 表示棋盘区域, . 表示空白区域(数据保证不出现多余的空白行或者空白列)。
Output
对于每一组数据,给出一行输出,输出摆放的方案数目C (数据保证C<2^31)。
Sample
Answer
import java.util.Scanner;
import javax.sound.midi.SoundbankResource;
/** * @author liangyuanshao * @date 2022/4/21 - 17:46 */
public class Main {
static Boolean[][] arr;
static int n,k;
static int count=0;
public static void main(String[] args) {
Scanner s=new Scanner(System.in);
while (true){
n=s.nextInt(); k=s.nextInt();
if(n!=-1){
arr=new Boolean[n][n];
for(int i=0;i<n;i++){
String temp=s.next();
for(int j=0;j<temp.length();j++){
arr[i][j]=temp.charAt(j)=='#';
}
}
count=0;
dfs(0,new boolean[n],k);
System.out.println(count);
}else {
break;
}
}
s.close();
}
public static void dfs(int row,boolean[] col,int num){
if(num==0){
count++;
return;
}
if(row==n){
return ;
}
dfs(row+1,col,num);
for(int j=0;j<n;j++){
if(arr[row][j]&&!col[j]){
col[j]=true;
dfs(row+1,col,num-1);
col[j]=false;
}
}
}
}
Experience
Java函数是传值还是传引用的问题,函数里面修改的结果,会不会影响调用者
比如说,下面那行加红框的代码为什么要存在?
- 基本变量就是传递的引用,不改变调用者本身,像int,boolean,float等
- 对象就是传递的引用,函数和调用者都是操作的同一个对象。因为数组是对象,所以上面要对col数组修改后,再修改回来
- 但是String比较特别,虽然它是对象,但是仍然传递的是引用,因为String是用final修饰,默认不可修改。函数传递的时候,其实是另开了一个空间传递了相同的String 对象。
版权声明
本文为[小梁说代码]所创,转载请带上原文链接,感谢
https://liangyuanshao.blog.csdn.net/article/details/124332888
边栏推荐
- IDEA 代码质量规范插件SonarLint
- A graphic designer's fantasy world | ones characters
- AD20补充笔记3—快捷键+持续更新
- 消息队列概述
- 论文解读(CGC)《CGC: Contrastive Graph Clustering for Community Detection and Tracking》
- Lesson 26 static member functions of classes
- 如果你是一个Golang面试官,你会问哪些问题?
- QT redraw events and cuts
- uni-app 原生APP-本地打包集成极光推送(JG-JPUSH)详细教程
- IDEA 代码格式化插件Save Actions
猜你喜欢
The database navigator uses the default MySQL connection prompt: the server time zone value 'Ö Ð¹ ú±ê ×¼ ʱ ¼ ä’ is unrecognized or repres
远程桌面之终端服务器超出了最大允许连接数解决
Step function of activation function
Metalama简介4.使用Fabric操作项目或命名空间
Intelligent multi line elastic cloud adds independent IP address. How to realize multi line function?
魔域来了H5游戏详细图文架设教程
How to expand the capacity of the server in the 100 million level traffic architecture? Well written!
亿级流量架构,服务器如何扩容?写得太好了!
Force buckle - 70 climb stairs
Fastjson 2 is coming, the performance continues to improve, and it can fight for another ten years
随机推荐
第二十五课 类的静态成员变量
Introduction to metalama 4 Use fabric to manipulate items or namespaces
宝塔面板命令行帮助教程(包含重置密码)
Running error: unable to find or load the main class com xxx. Application
The maximum number of remote desktop servers has been exceeded
MySQL函数-递归函数
IDEA设置版权信息
Fabric 1.0源代码分析(33) Peer #peer channel命令及子命令实现
欣旺达宣布电池产品涨价 此前获“蔚小理”投资超10亿
Step function of activation function
为什么hash%length==hash&(length-1)的前提是 length 是 2 的 n 次方
Fastjson 2 is coming, the performance continues to improve, and it can fight for another ten years
SPSS之单因素方差分析
【vulnhub靶场】-dc2
Here comes the detailed picture and text installation tutorial of H5 game
QT double buffer drawing
同态加密技术学习
Fastjson 2 来了,性能继续提升,还能再战十年
【Redis 系列】redis 学习十三,Redis 常问简单面试题
QT redraw events and cuts