- /*
- * 圖形串列表示法 與 DFS BFS 走訪使用
- */
- public class DFS_BFS {
- static GraphLink[] g = new GraphLink[6]; //此類別請參照 文章:圖形串列表示法
- static int[] run = new int[6];
- public static void main(String[] args) {
- int[][] am = {{1,2},{2,1},{1,5},{5,1},{2,3},{3,2},
- {2,4},{4,2}, {3,4},{4,3},
- {5,3},{3,5},{5,4},{4,5},
- };//每個邊
- int[][] am2 = {{1,2},{2,3},{2,4},{4,3}};
- System.out.println("無向圖形");
- for(int i = 1 ; i < 6 ; i++){
- g[i] = new GraphLink();
- System.out.print("頂點"+i+"=>");
- for(int j = 0 ; j < 14 ; j++){
- if(i == am[j][0])
- g[i].Insert(am[j][1]);
- }
- g[i].print();
- }
- /* System.out.println("先身後廣 :");
- dfs(1);*/
- System.out.println("\n先廣後深 :");
- bfs(1);
- }
- public static void dfs(int vertice){
- run[vertice] = 1;//代表走訪過
- System.out.print(" ( "+vertice+" ) ");
- while(g[vertice].frist != null){
- if(run[g[vertice].frist.vertice] == 0)
- dfs(g[vertice].frist.vertice);
- g[vertice].frist = g[vertice].frist.next;
- }
- }
- static int[] queue = new int[10];
- static int front = -1 , rear = -1 ;
- public static void enqueue(int value){
- if(rear >= 10){
- System.out.println("已滿");
- return ;
- }
- rear++ ;
- queue[rear] = value ;
- }
- public static void bfs(int vertice){
- run[vertice] = 1;//代表走訪過
- enqueue(vertice);//加入佇列
- System.out.print(" ( "+vertice+" ) ");
- while( (vertice = dequeue()) != -1){ //取出佇列值
- if(run[vertice] == 0)
- System.out.print(" ( "+vertice+" ) ");
- run[vertice] = 1;
- while(g[vertice].frist != null){
- if(run[g[vertice].frist.vertice] == 0){
- enqueue(g[vertice].frist.vertice) ;
- }
- g[vertice].frist = g[vertice].frist.next;
- }
- }
- }
- private static int dequeue() {
- if(rear == front)
- return -1;
- front++;
- return queue[front ];
- }
- }
2017年7月29日 星期六
(Java) 圖形串列表示法 DFS BFS
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。