112 10A Building A 10 F 112 ShinTaiWu
台北總公司/台北縣汐止市新台五路一段 112號 10樓A棟 Building A, 10 F, 112, Shin-Tai-Wu Road Sec. 1, Shijr, Taipei, Taiwan. 電話/ 02 -26962869 傳真/ 02 -26962867 台中辦事處/台中市文心路一段 540號 4樓-1 4 -1 F, 540, Wen Shing Road, Sec. 1, Taichung, Taiwan. 電話/ 04 -23287870 傳真/ 04 -23108168 博碩網址:http: //www. drmaster. com. tw
private Text. Area ta; private final int N=8; // 節點的數量 // 相鄰矩陣 private int[][] a={{0, 0, 0}, {0, 0, 1, 0, 0, 0}, {0, 1, 1, 0, 0}, {0, 0, 1, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 1, 1}, {0, 0, 0, 1, 0, 1}, {0, 0, 0, 1, 1, 0}}; private int[] v=new int[N+1]; // 查訪旗標 void visit(int i) { int j; v[i]=1; for (j=1; j<=N; j++) { if (a[i][j]==1 && v[j]==0) { ta. set. Text(ta. get. Text()+i+"->"+j+" "); visit(j); } } } ………
public Rei 51 Frame() { set. Size(300, 100); add. Window. Listener(new Window. Adapter() { public void window. Closing(Window. Event e) { System. exit(0); } }); Button bt; add(bt=new Button("圖形搜尋"), "North"); add(ta=new Text. Area(5, 40), "Center"); bt. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event e) { int i; for (i=1; i<=N; i++) v[i]=0; visit(1); } }); }
private final int N=8; // 節點數量 private int[][] a={{0, 0, 0}, // 相鄰矩陣 {0, 0, 1, 0, 0, 0}, {0, 1, 1, 1, 0, 0, 0}, {0, 0, 1, 0}, {0, 0, 1, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 1, 1}, {0, 0, 0, 1, 0, 1}, {0, 0, 0, 1, 1, 0}}; private int[] v=new int[N+1]; // 查訪旗標 private int[] queue=new int[100]; // 佇列 private int head=0, // 開頭資料的索引 tail=0; // 尾端資料的索引 public Rei 52 Frame() { set. Size(300, 150); add. Window. Listener(new Window. Adapter() { public void window. Closing(Window. Event e) { System. exit(0); } });
Button bt; add(bt=new Button("圖形的搜尋"), "North"); add(ta=new Text. Area(5, 40), "Center"); bt. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event e) { int i, j; for (i=1; i<=N; i++) v[i]=0; queue[tail++]=1; v[1]=1; do { i=queue[head++]; // 從佇列中取出 for (j=1; j<=N; j++) { if (a[i][j]==1 && v[j]==0) { ta. set. Text(ta. get. Text()+i+"->"+j+" "); queue[tail++]=j; // 存至佇列 v[j]=1; } } } while (head!=tail); } …………
add(bt=new Button("拓樸排序"), "North"); add(ta=new Text. Area(5, 40), "Center"); bt. add. Action. Listener(new Action. Listener() { public void action. Performed(Action. Event e) { int i; } }); for (i=1; i<=N; i++) v[i]=0; for (i=1; i<=N; i++) if (v[i]==0) visit(i);
private int success, n; // 通過路線的數目 private int[] v=new int[Root+1]; // 存有行經路線的堆疊 void visit(int i) { int j; v[n]=i; if (n==0 && i==Start) { // 通過邊並返回原位置 ta. set. Text(ta. get. Text()+"解"+(++success)+": "); for (i=0; i<=Root; i++) ta. set. Text(ta. get. Text()+v[i]+" "); ta. set. Text(ta. get. Text()+"n"); } else { for (j=1; j<=Node; j++) { if (a[i][j]!=0) { a[i][j]--; a[j][i]--; // 將通過的路線切掉 n--; visit(j); a[i][j]++; a[j][i]++; // 將路線復原 n++; } }
public void action. Performed(Action. Event e) { int j, k, p=0, start, min; int[] leng=new int[N+1], // 至節點的距離 v=new int[N+1]; // 確定旗標 ta. set. Text(""); start=Integer. parse. Int(tf. get. Text()); for (k=1; k<=N; k++) { leng[k]=M; v[k]=0; } leng[start]=0; for (j=1; j<=N; j++) { min=M; // 搜尋最小的節點 for (k=1; k<=N; k++) { if ( v[k]==0 && leng[k]<min) { p= k; min=leng[k]; } } v[p]=1; // 確定最小的節點 if (min==M) { ta. set. Text("圖形沒有連接n"); return; } // 經由p至k的距離若比當時最短的距離小的話,便會執行更新作業 for (k=1; k<=N; k++) { if (( leng[p]+a[p][k])<leng[k]) leng[k]=leng[p]+a[p][k]; } } }); } for (j=1; j<=N; j++) ta. set. Text(ta. get. Text()+start+" -> "+j+" : "+leng[j]+"n");
- Slides: 20