<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 大衛 閱讀(2996) 評論(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);
    我感覺是多余的!但是沒這有這句,運行有只有一個結果?
    為什么?
      回復  更多評論
      
    主站蜘蛛池模板: 亚洲日本成本人观看| 亚洲sss综合天堂久久久| 特黄aa级毛片免费视频播放| 猫咪社区免费资源在线观看| 亚洲成a人片在线观看精品| 午夜福利不卡片在线播放免费| 亚洲精品韩国美女在线| 2020久久精品国产免费| 亚洲人和日本人jizz| 亚洲成在人线aⅴ免费毛片| 亚洲中文字幕一区精品自拍| 免费无码黄动漫在线观看| 亚洲AV无码精品国产成人| 免费v片在线观看品善网| 免费很黄无遮挡的视频毛片| 亚洲精品在线视频| 国产成人无码区免费内射一片色欲| 亚洲成AV人片一区二区| 国产成人久久AV免费| 亚洲精品91在线| 好男人视频社区精品免费| 国产亚洲情侣久久精品| 亚洲日韩国产精品乱| 野花香高清视频在线观看免费| 亚洲国产综合专区电影在线| 国产片AV片永久免费观看 | 亚洲视频在线视频| 最近新韩国日本免费观看| 亚洲一级高清在线中文字幕| 免费看又爽又黄禁片视频1000| 天堂亚洲免费视频| 亚洲高清视频免费| 日本特黄特色免费大片| 中文字幕免费在线看| 亚洲国产精品免费在线观看| 精品剧情v国产在免费线观看| 一个人看的免费观看日本视频www| 亚洲AV永久无码精品水牛影视| 成人在线免费看片| 免费一区二区三区在线视频| 亚洲成在人天堂在线|