此题是19年机试中比较有区分度的一题,可以用两种方法做,DFS方法和动态规划方法
题目:有三种红黄蓝颜色填满连续的n个格子,相邻格子的颜色不一样,首尾的颜色也不一样,有几种涂色方法
题目来源:杭电OJ2045题 不容易系列之(3)—— LELE的RPG难题
一、DP方法
DP方法代码简洁且效率高,网上这题基本用的都是DP方法
DP方法的思路及代码可参见这篇博客:https://blog.csdn.net/universe_ant/article/details/72993809
二、DFS方法
DFS方法虽然时间复杂度和空间复杂度都高出很多,但胜在思路容易想,贴出JAVA代码如下:
public class Main {
static int count=0;
public static void main(String[] args) {
Scanner in = new Scanner((System.in));
System.out.print("请输入n:");
while(in.hasNextInt()){
int n = in.nextInt();
count=0;
dfs(-1,-1,1,n);
System.out.println("共有:"+count+" 种涂色方式");
System.out.print("请输入n:");
}
}
static void dfs(int first,int pre,int level,int n){
if(level==n+1){
count++;
return;
}
for(int i=1;i<=3;i++){
if(level==1){
first=i;
}
if(level==n){
if (i!=first&&i!=pre){
dfs(first,i,level+1,n);
}
}else {
if (i!=pre){
dfs(first,i,level+1,n);
}
}
}
}
}