博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
全排列问题
阅读量:6528 次
发布时间:2019-06-24

本文共 1410 字,大约阅读时间需要 4 分钟。

  问题描述:针对1、2、2、3、4、5这6个数字,写一个函数,打印出所有不同的排列,例如512234,215432等,要求“4”不能再第三位,“3”,“5”不能相连。

  思路:针对这个问题,可以将6个节点构成一个无向连通图。由于3和5不能相连,因此在构造图时3和5不能相连。对于4不能出现在第三位可以在遍历结束时判断。

代码如下:

import java.util.LinkedList;import java.util.Set;import java.util.TreeSet;public class QuanPailie {	private int[] numbers = new int[] { 1, 2, 2, 3, 4, 5 };	private int n = numbers.length;	private boolean[] visited = new boolean[n];	private int[][] gra = new int[n][n];	private Set
set = new TreeSet
(); private LinkedList
stack = new LinkedList
(); public Set
getAll() { buildGra(); for (int i = 0; i < n; i++) { dfs(i, stack); } return set; } private void buildGra() { for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (i == j) { gra[i][j] = 0; } else { gra[i][j] = 1; } } } gra[5][3] = 0; gra[3][5] = 0; } private void dfs(int i, LinkedList
stack) { visited[i]=true; stack.addLast(numbers[i]); if (stack.size() == 6 && stack.get(2) != 4) { set.add(fromStackToString(stack)); } for(int j = 0; j
linkedList) { StringBuilder builder = new StringBuilder(); for (Integer integer : linkedList) { builder.append(integer); } return builder.toString(); } public static void main(String[] args) { QuanPailie pailie=new QuanPailie(); Set
set=pailie.getAll(); for (String string : set) { System.out.println(string); } }}

转载地址:http://rxtbo.baihongyu.com/

你可能感兴趣的文章
Quartz学习笔记
查看>>
多线程之旅之三——Windows内核对象同步机制
查看>>
spoj 694 求一个字符串中不同子串的个数
查看>>
KindEditor 4.1.7的使用技巧
查看>>
[转]内存中堆和栈的区别
查看>>
软工实践第七次作业-软件工程实践总结作业
查看>>
linux系统配置之bash shell的配置(centos)
查看>>
linux C 9*9
查看>>
hdu 1695: GCD 【莫比乌斯反演】
查看>>
python的string操作总结
查看>>
如何把word中的图片怎么导出来呢?
查看>>
java.lang.NoSuchFieldError 异常原因
查看>>
Eclipse常见配置及常用插件
查看>>
FreeImage使用
查看>>
程序与资源管理
查看>>
CentOS 7 Apache 多端口部署 Web Apps 指南
查看>>
【无私分享:ASP.NET CORE 项目实战(第八章)】读取配置文件(二) 读取自定义配置文件...
查看>>
如何向nexus第三方库中传入自己的包
查看>>
FZU2143Board Game(最小费用流)
查看>>
数据库设计三大范式应用实例剖析(讲得比较清楚)
查看>>