KAY

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

          無向圖

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

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

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

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

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

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

          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;
          }
          }

           

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


          評論

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

          2009-01-02 17:06 by 1212
          ....你這是用鄰接矩陣存儲的,當數(shù)據(jù)量大的時候?qū)兊暮苈!!?/div>

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


          網(wǎng)站導航:
           
          QQ:
          254653340
          MSN:
          xf_chouyang@hotmail.com
          主站蜘蛛池模板: 固安县| 曲周县| 广德县| 盐池县| 当阳市| 兰西县| 曲松县| 沁水县| 盐亭县| 大新县| 广宗县| 原平市| 额济纳旗| 兴业县| 田东县| 定安县| 富顺县| 大邑县| 上虞市| 邢台县| 蒙自县| 新乡市| 土默特左旗| 辽宁省| 绥中县| 台东县| 台山市| 陈巴尔虎旗| 阳朔县| 乌兰县| 新密市| 秦皇岛市| 贡觉县| 湘西| 安图县| 泰来县| 定南县| 南漳县| 郑州市| 江阴市| 滨州市|