符号三角形问题(回溯法)
来源:互联网 发布:彩票代购软件 编辑:程序博客网 时间:2024/06/14 20:10
import java.util.Scanner;/** * 题:符号三角形问题 * 给定第一行的符号个数,符号只能为+或者 - 问+ 和 - 个数相同的方案有多少种 * example: * ++- * +- * - * 利用回溯法 。当其中一种个数大于一半时 ,不进行下层计算。即剪枝 * 注:二维数组的0列都不要,从第一行,第一列开始算 * * */public class Triangle { public static int [][] p ; //三角形数组 public static int count = 0 ; // + 为 0 , - 为 1 ,记 -个数 public static int half; // n*(n+1)/4 public static int n; // 第一行符号的个数 public static int sum; // 已找到符号三角形的个数 public static void main(String args[]) { p = new int[100][100]; System.out.println("输入第一行符号的个数;"); Scanner sc = new Scanner(System.in); n =sc.nextInt() ; half = n*(n+1)/4; //+ 号个数 或者 -号的个数 if( n*(n+1)/2 == 1 ) //+- 号至和等于 奇数 不可能 System.out.println("无解 "); Backtrack(1); //从第一列开始算 System.out.println(sum); } private static void Backtrack(int t) { if(count > half || t*(t-1)/2-count > half ) return; //减号的个数或者加号的个数大于一半,退出 if(t > n ) //符合要求 sum++; { sum ++; for(int i = 1 ; i <= n ; i ++) //打印 { for(int j = 1 ; j <= n ; j ++) System.out.print(p[i][j]); System.out.println(); } System.out.println("-------------------"); } else { for(int i = 0 ; i < 2 ; i ++) { p[1][t] = i; count += i ; //记住减号的个数,因为加号为零 for(int j = 2 ; j <= t ; j ++) //假如符号的个数大于2,可以求接下来的符号 { p[j][t-j+1] = p[j-1][t-j+1] ^ p[j-1][t-j+2]; // 很巧 不会每次吧算过的再算一边 count += p[j][t-j +1]; } Backtrack(t+1); //继续这条树枝深入下去 for(int j = 2 ; j <=t ; j ++ ) //回溯 不要这个点 把加入的迪安删除 count -= p[j][t-j+1]; count -= i ; //删除 } } } }
1 0
- 符号三角形问题(回溯法)
- 符号三角形问题 回溯法
- 符号三角形问题-回溯法
- 符号三角形问题(回溯)
- 符号三角形问题(回溯)
- 回溯法解符号三角形问题
- 回溯法求解符号三角形问题
- Python回溯法解符号三角形问题
- 回溯法-符号三角形
- 符号三角形 回溯法
- 回溯之符号三角形问题
- 第5章 回溯法,符号三角形问题
- 算法java实现--回溯法--符号三角形问题
- 算法设计_回溯法_符号三角形问题
- 符号三角形问题(回溯)-算法设计与分析
- 小白笔记-----------------------符号三角形问题(回溯法---子集树)
- 回溯法之符号三角形测试代码
- 0028算法笔记——【回溯法】批作业调度问题和符号三角形问题
- (4)程序编译与代码优化
- Oracle VM VirtualBox在电脑上安装后只显示32位版本不显示64位版本的问题
- UFLDL编程练习——Sparse Autoencoder
- IntelliJ IDEA15 简要使用手册
- Flash as 3.0中的函数
- 符号三角形问题(回溯法)
- 紫书第五章
- JNI完全指南(九)——反射
- [LeetCode]Binary Tree Inorder Traversal
- 静态成员函数不可以访问类中的成员变量
- 三级联动android-wheel
- 循环双链表
- php 框架
- Android 中的Binder跨进程通信机制与AIDL