首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

DFS&BFS(链式前向星兑现)

2012-11-10 
DFS&BFS(链式前向星实现)#include iostream#include cstdio#include cstring#define maxn 10000#def

DFS&BFS(链式前向星实现)

#include <iostream>#include <cstdio>#include <cstring>#define maxn 10000#define maxm 100using namespace std;typedef struct EdgeNode{    int to;    int w;    int next;};EdgeNode edges[maxm];int head[maxm];int edgenum = 1;int n, m;bool s[maxn] = {0};bool f[maxn] = {0};void init(){    memset(head, 0, sizeof(head));    edgenum = 1;}void outputmap(){    int k;    for(int i = 1; i <= n; i++){        if(head[i]!=0) {k = head[i];}        for( ; k != 0; k = edges[k].next){            printf("%d->%d %d\n", i, edges[k].to, edges[k].w);        }    }}void DFS(int x){    s[x] = true;    printf("%d\n", x);    for(int i = head[x]; i != 0; i = edges[i].next){        if(!s[edges[i].to]){            DFS(edges[i].to);        }    }}void BFS(int x){    int queue[maxn];    int iq = 0;    queue[iq++] = x;    s[x] = true;//标记    for(int i = 0; i < iq; i++){        printf("%d\n", queue[i]);        for(int k = head[queue[i]]; k != 0; k = edges[k].next){            if(!f[edges[k].to]){                f[edges[k].to] = true; //标记                queue[iq++] = edges[k].to;            }        }    }}int main(){    int a, b, c;    while(scanf("%d%d", &n, &m)!=EOF){        init();        for(int i = 1; i <= m; i++){            scanf("%d%d%d", &a, &b, &c);            edges[edgenum].to = b;            edges[edgenum].w = c;            edges[edgenum].next = head[a];            head[a] = edgenum;            edgenum++;        }        outputmap();        printf("DFS:\n");        DFS(1);        printf("BFS:\n");        BFS(1);    }    return 0;}8 125 8 296 1 128 3 111 2 43 1 224 3 177 4 256 5 98 7 71 6 93 2 196 7 4

热点排行