TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
题目::
用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"与"5"不能相连。
不是特别难的题目,暴力算和用图论算(深度遍历)都可以,结果是198。
- import java.util.Iterator;
- import java.util.TreeSet;
- public class CharSequence {
- private String[] c = {"1","2","2","3","4","5"};
- private int n = c.length;
- private boolean[] visited = new boolean[n];
- private int[][] g = new int[n][n];
- private TreeSet< String> ts = new TreeSet< String>();
- private String result = "";
- public CharSequence(){
- for(int i=0; i< n;i++){
- for(int j=0; j< n;j++){
- if(i == j) g[i][j] = 0;
- else g[i][j] = 1;
- }
- }
- g[3][5] = 0;
- g[5][3] = 0;
- }
- public void depthFirst(int index){ //搜索以index开头的排列
- visited[index] = true;
- result += c[index];
- if(result.length() == n){
- ts.add(result);
- result = result.substring(0,result.length()-1);
- visited[index] = false;
- }
- else{
- for(int i=0; i< n;i++){
- if(!visited[i] && g[index][i] == 1){
- depthFirst(i);
- }else continue;
- }
- result = result.substring(0,result.length()-1);
- visited[index] = false;
- }
- }
- public void graphicGet(){
- for(int i=0; i< n;i++){
- depthFirst(i);
- }
- int count = 0;
- System.out.print("搜索的结果:");
- Iterator< String> it = ts.iterator();
- while(it.hasNext()){
- String tmp = it.next();
- //(tmp.contains("35")) continue;
- //(tmp.contains("53")) continue;
- if(tmp.charAt(3) == "4") continue;
- System.out.println(tmp);
- count++;
- }
- System.out.println("共计:"+count+"个");
- }
- public void bruteForce(){
- System.out.println("暴力搜的结果:");
- int count = 0;
- for(int i = 122345; i< 543222; i++){
- String tmp = ""+i;
- if(tmp.charAt(3) == "4") continue; //"4"不能在第三位
- if(tmp.contains("35")) continue; //"3"与"5"不能相连。
- if(tmp.contains("53")) continue; //"3"与"5"不能相连。
- //必需同时含5、4、3、1
- if(tmp.contains("5") && tmp.contains("4") && tmp.contains("3") && tmp.contains("1")){
- int index = tmp.indexOf("2");
- if(index == -1) continue; //没有2
- if(index == tmp.length()-1) continue; //只有一个2
- if(tmp.substring(index+1).contains("2")){
- System.out.println(tmp);
- count++;
- }
- }
- }
- System.out.print("共计:"+count+"个");
- }
- public void recrusive(){
- }
- public static void main(String[] args) {
- CharSequence cs = new CharSequence();
- //图论的方法
- cs.graphicGet();
- //暴力搜索
- // cs.bruteForce();
- }
- }
复制代码
C:java>javac CharSequence.java C:java>java CharSequence
搜索的结果:122345
122543
123245
123254
124325
124523
125234
125243
132245
132254
132524
132542
134225
134252
134522
142325
142523
143225
143252
145223
145232
152234
152243
152324
152342
154223
154232
154322
212345
212543
213245
213254
214325
214523
215234
215243
221345
221543
223145
223154
224315
224513
225134
225143
231245
231254
231524
231542
232145
232154
232514
232541
234125
234152
234215
234251
234512
234521
241325
241523
242315
242513
243125
243152
243215
243251
245123
245132
245213
245231
251234
251243
251324
251342
252134
252143
252314
252341
254123
254132
254213
254231
254312
254321
312245
312254
312524
312542
314225
314252
314522
315224
315242
321245
321254
321524
321542
322145
322154
322514
322541
324125
324152
324215
324251
324512
324521
325124
325142
325214
325241
341225
341252
341522
342125
342152
342215
342251
342512
342521
345122
345212
345221
412325
412523
413225
413252
415223
415232
421325
421523
422315
422513
423125
423152
423215
423251
425123
425132
425213
425231
431225
431252
431522
432125
432152
432215
432251
432512
432521
451223
451232
451322
452123
452132
452213
452231
452312
452321
512234
512243
512324
512342
513224
513242
514223
514232
514322
521234
521243
521324
521342
522134
522143
522314
522341
523124
523142
523214
523241
524123
524132
524213
524231
524312
524321
541223
541232
541322
542123
542132
542213
542231
542312
542321
543122
543212
543221
共计:198个 C:java>
源码下载:http://file.javaxxz.com/2014/11/30/000655390.zip |
|