<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 55  文章 - 187  trackbacks - 0
    <2008年2月>
    272829303112
    3456789
    10111213141516
    17181920212223
    2425262728291
    2345678

    常用鏈接

    留言簿(12)

    隨筆分類

    隨筆檔案

    groovy

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    算法程序題:

        該公司筆試題就1個,要求在10分鐘內作完。

        題目如下:用1、2、2、3、4、5這六個數字,用java寫一個main函數,打印出所有不同的排列,如:512234、412345等,要求:"4"不能在第三位,"3"與"5"不能相連。

      基本思路:
    1 把問題歸結為圖結構的遍歷問題。實際上6個數字就是六個結點,把六個結點連接成無向連通圖,對于每一個結點求這個圖形的遍歷路徑,所有結點的遍歷路徑就是最后對這6個數字的排列組合結果集。
    2 顯然這個結果集還未達到題目的要求。從以下幾個方面考慮:
      1. 3,5不能相連:實際要求這個連通圖的結點3,5之間不能連通, 可在構造圖結構時就滿足改條件,然后再遍歷圖。
      2. 不能有重復: 考慮到有兩個2,明顯會存在重復結果,可以把結果集放在TreeSet中過濾重復結果。//TreeSet用于過濾一個集合中相同的東西還真是個挺不錯的方法
      3. 4不能在第三位: 仍舊在結果集中去除滿足此條件的結果。

    采用二維數組定義圖結構,最后的代碼是:

     1package test;
     2
     3import java.util.Iterator;
     4import java.util.TreeSet;
     5
     6public class TestQuestion {
     7
     8    private String[] b = new String[] "1""2""2""3""4""5" };
     9    private int n = b.length;
    10    private boolean[] visited = new boolean[n];
    11    private int[][] a = new int[n][n];
    12    private String result = "";
    13    private TreeSet treeSet = new TreeSet();// 用于保存結果,具有過濾相同結果的作用。
    14
    15    public static void main(String[] args) {
    16        new TestQuestion().start();
    17    }

    18
    19    private void start() {
    20        // 創建合法路徑標識集合
    21        for (int i = 0; i < n; i++{
    22            for (int j = 0; j < n; j++{
    23                if (i == j) {
    24                    a[i][j] = 0;
    25                }
     else {
    26                    a[i][j] = 1;
    27                }

    28            }

    29        }

    30        a[3][5= 0;
    31        a[5][3= 0;
    32        for (int i = 0; i < n; i++{
    33            this.depthFirstSearch(i);// 深度遞歸遍歷
    34        }

    35        Iterator it = treeSet.iterator();
    36        while (it.hasNext()) {
    37            String string = (String) it.next();
    38
    39            if (string.indexOf("4"!= 2{
    40                System.out.println(string);
    41            }

    42        }

    43    }

    44
    45    /**
    46     * 深度優先遍歷
    47     * 
    48     * @param startIndex
    49     */

    50    private void depthFirstSearch(int startIndex) {
    51        // 遞歸的工作
    52        visited[startIndex] = true;// 用于標識已經走過的節點
    53        result = result + b[startIndex];// 構造結果
    54        if (result.length() == n) {
    55            treeSet.add(result);// 添加到TreeSet類型中,具有過濾相同結果的作用
    56        }

    57        // 每走到一個節點,挨個遍歷下一個節點
    58        for (int j = 0; j < n; j++{
    59            if (a[startIndex][j] == 1 && visited[j] == false{
    60                depthFirstSearch(j);// 深度遞歸遍歷
    61            }
     else {
    62                continue;
    63            }

    64        }

    65        // 遞歸的收尾工作
    66        result = result.substring(0, result.length() - 1);
    67        visited[startIndex] = false;// 取消訪問標識
    68    }

    69}

    70

    --------------------

        WE準高手
    posted on 2008-02-27 14:30 大衛 閱讀(3003) 評論(12)  編輯  收藏 所屬分類: Java

    FeedBack:
    # re: 對一個算法筆試題的注解 2008-02-27 19:56 junglesong的博客
    不錯!  回復  更多評論
      
    # re: 對一個算法筆試題的注解 2008-02-27 21:16 --dntask
    好!  回復  更多評論
      
    # re: 對一個算法筆試題的注解 2008-02-27 21:26 Edward's
    高  回復  更多評論
      
    # re: 對一個算法筆試題的注解 2008-02-29 13:48 xdcsoft
    10分鐘能寫出來嗎?
    我是不能啊  回復  更多評論
      
    # re: 對一個算法筆試題的注解 2008-03-02 14:38 xifu
    不錯,多了一條路子  回復  更多評論
      
    # re: 對一個算法筆試題的注解 2008-03-02 18:03 macrochao
    這道題剛拿到手以為很簡單,其實還是很有難度的  回復  更多評論
      
    # re: 對一個算法筆試題的注解 2008-03-04 11:18 思想的盛宴
    十分鐘可以寫出這樣的程序?誰站起來回答我  回復  更多評論
      
    # re: 對一個算法筆試題的注解 2008-03-08 17:16 xinzhang
    很好  回復  更多評論
      
    # re: 對一個算法筆試題的注解 2008-03-19 09:43 xiao
    我是暫時搞不定的  回復  更多評論
      
    # re: 對一個算法筆試題的注解 2008-09-25 12:44 somebody
    此答案不可取。
    對于一個沒有工作過的人,TreeSet能知道的有幾個人?
    如果沒有幾個人知道的話,那么這個答案就是不可取的。
    一拿到這個題的人能想到這種算法,我佩服了。  回復  更多評論
      
    # re: 對一個算法筆試題的注解 2010-12-01 16:23 hehui
    result = result.substring(0, result.length() - 1);
      回復  更多評論
      
    # re: 對一個算法筆試題的注解 2010-12-01 16:25 hehui
    我沒看懂這句
    result = result.substring(0, result.length() - 1);
    我感覺是多余的!但是沒這有這句,運行有只有一個結果?
    為什么?
      回復  更多評論
      
    主站蜘蛛池模板: 精品久久久久久亚洲| 亚洲高清视频免费| 免费国产成人午夜在线观看| 亚洲一区二区三区高清| 成人性生交大片免费看午夜a| 免费高清A级毛片在线播放| 亚洲av无码潮喷在线观看| 国产一精品一AV一免费孕妇| 无遮挡a级毛片免费看| 内射干少妇亚洲69XXX| 亚洲AV无码不卡在线观看下载| 无码A级毛片免费视频内谢| www亚洲精品久久久乳| 亚洲va中文字幕无码久久不卡| 岛国av无码免费无禁网站| eeuss影院www天堂免费| 亚洲国产人成在线观看| 亚洲日韩人妻第一页| 18禁成人网站免费观看| 一区二区三区免费视频播放器| 亚洲三级中文字幕| 亚洲中文字幕久久精品无码喷水| 日韩不卡免费视频| a级毛片毛片免费观看久潮喷| 亚洲国产精品无码久久| 亚洲人成电影亚洲人成9999网| 又黄又爽的视频免费看| 免费影院未满十八勿进网站| 久久精品免费网站网| 亚洲av永久无码精品秋霞电影秋 | 亚洲综合激情五月色一区| 国产专区一va亚洲v天堂| 无码永久免费AV网站| aa毛片免费全部播放完整| 亚洲av日韩av永久无码电影| 中文字幕亚洲精品| 亚洲AV中文无码乱人伦下载| 亚洲不卡AV影片在线播放| 最近的中文字幕大全免费版| 1000部无遮挡拍拍拍免费视频观看| 国产VA免费精品高清在线|