p349图的DFS
来源:互联网 发布:mcs51单片机数据总线 编辑:程序博客网 时间:2024/06/10 04:57
- 之前都是零零散散知道些DFS(现在还是零零散散),现在发现时间戳这个东西很有用哈 ,可以瞬间判断两个节点在搜索树中的关系,还可以判断边的类型,期待以后发挥用武之地吧
写这段代码的感受:
- 之前在写BFS的时候,图的点数啊,边数啊什么的都没有集成在一起,这次首先用一个G里面包括了点数v,边数e,点集g(指针);g[i]是node类型,包括d,f(和书中的意义相同),color,和指向第一条边的指针next;最后edge里面只有边的终点i和指向下一条边的指针next。这样,一个图的所有属性都包含在G里面了,总之写起来很舒服
- 之前一直不知道条件编译是干什么的,现在发现在检查程序中间结果的时候,它还是很方便的啦
- 最后不得不说变量起好了名字代码写起来舒服很多啊
#define debug 0#include<stdio.h>#include<stdlib.h>#define white 1#define gray 2#define black 3typedef struct edge{ int i; struct edge *next;}edge;typedef struct node{ int d,f,color; edge *next;}node;typedef struct gve{ int v,e; node *g;}gve;int insert(node *pnode,int i){ edge *new; new=(edge *)malloc(sizeof(edge)); new->i=i; new->next=pnode->next; pnode->next=new; return 0;}#if debugint print(gve G){ int i; edge *tmp; printf("This is for debug!\n"); printf("%d %d\n",G.v,G.e); for (i=1;i<=G.v;i++) { printf ("%d: ",i); tmp=G.g[i].next; while (tmp!=NULL) { printf("%d ",tmp->i); tmp=tmp->next; } printf("\n"); } printf("end!\n"); return 0;}#endifint dfsvisit(gve G,node *pnode,int *time){ edge *tmp=pnode->next; (*time)++; pnode->d=*time; pnode->color=gray; while (tmp!=NULL) { if (G.g[tmp->i].color==white) dfsvisit(G,&G.g[tmp->i],time); tmp=tmp->next; } pnode->color=black; (*time)++; pnode->f=*time; return 0;}int dfs(gve G){ int time=0,i; for (i=1;i<=G.v;i++) if (G.g[i].color==white) dfsvisit(G,&G.g[i],&time); return 0;}int printtree(gve G){ int i; for (i=1;i<=G.v;i++) printf("%d: color %d d %d f %d\n",i,G.g[i].color,G.g[i].d,G.g[i].f); return 0;}int main(void){ int i; gve G; scanf("%d%d",&G.v,&G.e); G.g=(node *)malloc(sizeof(node)*(G.v+1)); for (i=1;i<=G.v;i++) { G.g[i].next=NULL; G.g[i].color=white; } int s,d; for (i=1;i<=G.e;i++) { scanf("%d%d",&s,&d); insert(&G.g[s],d); } #if debug print(G); #endif dfs(G); printtree(G); return 0;}
0 0
- p349图的DFS
- p349 22.2-7二分图
- UVA 11186(p349)----Circum Triangle
- 图的DFS
- 图的dfs
- 图的DFS实现
- 图的遍历-DFS
- 图的遍历DFS
- 图的dfs、bfs
- 图的遍历(DFS)
- 【图的DFS】图的DFS非递归算法
- 1419 图的DFS遍历
- 图的链表 dfs
- 图的遍历(DFS)
- 图的遍历:DFS BFS
- 图的深度遍历(DFS)
- 图的深度遍历(DFS)
- 图的BFS与DFS
- 逆向工程-对native层的一次简单逆向实践
- UITabBarController使用详解
- 交换两个数的特殊方法
- 关于Android滑动冲突的解决方法(一)
- 腾讯面试记录
- p349图的DFS
- 删除给定数组中的指定元素
- NavigationToolBar的使用
- 【poj 1159】Palindrome 题意&题解&代码(C++)
- (4.6.4)性能优化之Java(Android)代码优化
- Android Studio下如何配置AIDL文件并生成java文件
- (4.6.5)移动端网络优化
- phpcms学习笔记
- 网易前端实习生笔试最后一题ajax实现文件上传带进度条