图-分有向图和没向图

    1

/    |      \

2    3  —   5

4

1.输出遍历的路径(图深度优先搜索实现)

//1代表有边,5代表没边
int
book[101],sum,n=6,m=6,e[101][101] = { {0,0,0,0,0,0}, {0,0,1,1,5,1}, {0,1,0,5,1,5}, {0,1,5,0,5,1}, {0,5,1,5,0,5}, {0,1,5,1,5,0}}; void dfs(int cur);//cur当前定点编号

.

//图-深度优先搜索
        book[1] = 1;
        dfs(1);

.

void dfs(int cur){
    printf("%d\t",cur);
    sum++;
    if (sum==n) return;
    for (int i = 1; i <= n; i++) {
        if (e[cur][i]==1 && book[i]==0) {
            book[i] = 1;
            dfs(i);
        }
    }
    
}//cur当前定点编号

2.输出遍历的路径(图的广度优先搜索实现)

//广度优先搜索 =(队列+hashMap)
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        //图-广度优先搜索
        int que[10001],head = 1,tail = 1,cur = 0;
        que[tail] = 1;
        tail++;
        book[1] = 1;
        
        while (head < tail)
        {
            cur = que[head];
            for (int i = 1; i <= n; i++)
            {
                //有边的情况下,入队
                if (e[cur][i]==1 && book[i]==0) {
                    
                    que[tail] = i;
                    tail++;
                    book[i] = 1;
                }
                if (tail>n) {
                    break;
                }
            }
            head++;
        }
        for (int i = 1; i < tail; i++) {
            printf("%d\t",que[i]);
        }
    }
    return 0;
}

 2.通过值为1的节点找到值为5的节点(图的广度优先搜索实现)

package com.company;
import java.util.LinkedList;
import java.util.Queue;


class GraphNode
{
    int val;
    GraphNode next;//
    GraphNode[] neighbors;//
    boolean visited;

    GraphNode(int x)
    {
        val = x;
    }
    //
    GraphNode(int x,GraphNode[] n)
    {
        val = x;
        neighbors = n;
    }
}


public class Main {

    public static void main(String[] args) {
    // write your code here
        GraphNode n1 = new GraphNode(1);
        GraphNode n2 = new GraphNode(2);
        GraphNode n3 = new GraphNode(3);
        GraphNode n4 = new GraphNode(4);
        GraphNode n5 = new GraphNode(5);
        //
        n1.neighbors = new GraphNode[]{n2,n3,n5};
        n2.neighbors = new GraphNode[]{n1,n4};
        n3.neighbors = new GraphNode[]{n1,n4,n5};
        n4.neighbors = new GraphNode[]{n2,n3,n5};
        n5.neighbors = new GraphNode[]{n1,n3,n4};
        //
        breathFirstSearch(n1,5);

    }

    public static void breathFirstSearch(GraphNode root,int x)
    {
        if (root.val == x)
        {
            System.out.printf("find in root");
        }

        Queue<GraphNode> queue = new LinkedList<>();
        root.visited = true;
        queue.offer(root);

        while (!queue.isEmpty())
        {
            GraphNode c = queue.poll();
            for (GraphNode n : c.neighbors)
            {
                if (!n.visited)
                {
                    System.out.printf("%d ",n.val);
                    n.visited = true;
                    if (n.val == x)
                    {
                        System.out.printf("\nfind result %d",n.val);
                    }
                }
            }
        }
    }
    
}

 

posted @ 2016-02-26 10:37  forrHuen  阅读(210)  评论(0编辑  收藏  举报