KAY

          人之所以能,是相信能。
          posts - 6, comments - 5, trackbacks - 0, articles - 11
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          無向圖

          Posted on 2008-03-04 12:38 KAY 閱讀(284) 評論(1)  編輯  收藏

          java面試算法題(經典)
          算法程序題:

              該公司筆試題就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中過濾重復結果
            3. 4不能在第三位: 仍舊在結果集中去除滿足此條件的結果。

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

          import java.util.Iterator;
          import java.util.TreeSet;

          public class TestQuestion {

          private String[] b = new String[]{"1", "2", "2", "3", "4", "5"};
          private int n = b.length;
          private boolean[] visited = new boolean[n];
          visited =falsh;
          private int[][] a = new int[n][n];
          private String result = "";
          private TreeSet TreeSet = new TreeSet();

          public static void main(String[] args) {
          new TestQuestion().start();
          }

          private void start() {
          for (int i = 0; i < n; i++) {
          for (int j = 0; j < n; j++) {
          if (i == j) {
          a[i][j] = 0;
          } else {
              a[i][j] = 1;
          }
          }
          }a[3][5] = 0;
          a[5][3] = 0;
          for (int i = 0; i < n; i++) {
              this.depthFirstSearch(i);
          }
          Iterator it = set.iterator();
          while (it.hasNext()) {
          String string = (String) it.next();

          if (string.indexOf("4") != 2) {
          System.out.println(string);
          }
          }
          }

          private void depthFirstSearch(int startIndex) {
          visited[startIndex] = true;
          result = result + b[startIndex];
          if (result.length() == n) {
          TreeSet .add(result);
          }
          for(int j = 0; j < n; j++) {
          if (a[startIndex][j] == 1 && visited[j] == false) {
          depthFirstSearch(j);
          } else {
          continue;
          }
          }
              result = result.substring(0, result.length() -1);
              visited[startIndex] = false;
          }
          }

           

          注:郁悶,花了半個多小時才能寫出來,還是看的提示!!!無向圖,學數據結構時對他就不是很感冒


          評論

          # re: 無向圖  回復  更多評論   

          2009-01-02 17:06 by 1212
          ....你這是用鄰接矩陣存儲的,當數據量大的時候將會變的很慢。。。

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          QQ:
          254653340
          MSN:
          xf_chouyang@hotmail.com
          主站蜘蛛池模板: 亳州市| 启东市| 壶关县| 铁力市| 嘉黎县| 祁阳县| 林口县| 吉木萨尔县| 金秀| 乌拉特后旗| 容城县| 蚌埠市| 邓州市| 荆门市| 咸宁市| 孟津县| 洛阳市| 丰镇市| 武安市| 晋城| 乐都县| 长垣县| 沽源县| 洛川县| 永城市| 博野县| 康定县| 瓮安县| 宜春市| 六枝特区| 遂昌县| 新丰县| 三原县| 鸡西市| 南川市| 陆良县| 丹凤县| 维西| 恭城| 靖江市| 乌兰察布市|