简单Graph类
来源:互联网 发布:淘宝卖家打印订单 编辑:程序博客网 时间:2024/05/14 03:35
#include<iostream>#include<string>#include<queue>#include<algorithm>#include<cstdio>#include<vector>using namespace std;class Node{public: bool vis;int first;Node(){vis=false;first=-1;}};template<typename Elem>class Edge{public:int from,to;Elem val;int nxt;Edge(int f,int t,Elem v):from(f),to(t),val(v){}Edge(){}explicit Edge(Edge &b){b.from=from;b.to=to;b.val=val;b.nxt=nxt;}};template <typename Elem>class Graph{int num_of_edge,num_of_node;//容量,真实值大于等于这个值时执行expand函数int curNodeSize,curEdgeSize;Node *node;Edge<Elem> *edge;private:void expandNode(){num_of_node<<=1;Node *tem=node;node=new Node[num_of_node];for(int i=0;i<curNodeSize;i++){node[i]=tem[i];}delete tem;}void expandEdge(){num_of_edge<<=1;Edge<Elem> *tem=edge;edge=new Edge<Elem>[num_of_edge];for(int i=0;i<curEdgeSize;i++){edge[i]=tem[i];}delete tem;}public:Graph(int nodeNum,int edgeNum){node=new Node[nodeNum];edge=new Edge<Elem>[edgeNum];num_of_edge=edgeNum;num_of_node=nodeNum;curNodeSize=0,curEdgeSize=0;}Graph(){num_of_edge=1000;num_of_node=500;node=new Node[500];edge=new Edge<Elem>[1000];curNodeSize=0,curEdgeSize=0;}void reset(){for(int i=0;i<curNodeSize;i++){node[i].first=-1;}curNodeSize=0,curEdgeSize=0;}void addEdge(int from,int to,Elem val){edge[curEdgeSize].nxt=node[from].first;edge[curEdgeSize].val=val;edge[curEdgeSize].to=to;edge[curEdgeSize].from=from;node[from].first=curEdgeSize++;if(curEdgeSize==num_of_edge) expandEdge();}void addNode(){curNodeSize++;if(curNodeSize==num_of_node) expandNode();}void DFS(int root){cout<<root<<' ';node[root].vis=true;for(int i=node[root].first;i!=-1;i=edge[i].nxt){int to=edge[i].to;if(node[to].vis==false){DFS(to);}}}};int main(){Graph<int> graph(10,50);for(int i=0;i<5;i++) graph.addNode();graph.addEdge(0,2,3);graph.addEdge(1,3,6);graph.addEdge(0,1,6);graph.DFS(0);}
1 0
- 简单Graph类
- 简单图模板 Graph
- uva10720 - Graph Construction(简单图的判定)
- HDU6029-Graph Theory-图论简单推理
- graph
- Graph
- Graph
- graph
- Graph
- Graph
- Graph
- graph
- Graph
- Graph
- graph
- Graph
- Graph
- graph
- 使用NuGet管理自己的包
- Git常用命令查询
- 使用Metasploit入侵windows之自动扫描
- Shell命令--paste
- maven的概念,生命周期,插件,goal等
- 简单Graph类
- 程序员的爱情
- linux下异步网络操作的错误码
- 运行resin时出现的一点儿小问题
- Android 代码混淆exception解决办法
- ApplicationContext.xml中加载properties配置文件
- 几个C++文件输入常用函数(1)
- hdu1176免费馅饼(动态规划)
- Android--ViewPager 组件使用详解