首页 > 代码库 > 通用邻接表---vector实现
通用邻接表---vector实现
手写邻接表很麻烦。。。。所以写了一个邻接表模板,方便用
vector实现,使用时看看代码注释即可
#include <iostream>#include <vector>#include <cstdio>#include <malloc.h>#define INF 99999999;#define max_point 1000000 ////定义总共的节点数目 using namespace std;struct node{ int u, v, w;//分别代表一条边的起点,终点,权值 };vector<node> mymap[max_point]; //储存图 //插入一条边 void insertnode(int u, int v, int w, bool isdirection)//参数分别表示起点,终点,权值,还有是否为有向图 { node temp1 = {u, v, w}; node temp2 = {v, u, w}; if( isdirection ) { mymap[u].push_back(temp1); } else { mymap[u].push_back(temp1); mymap[v].push_back(temp2); }}//删除一条边 //返回0表示删除失败//返回大于0的整数表示删除了多少条边 int deletenode(int u, int v, bool isdirection)//参数分别表示起点,终点,权值,还有是否为有向图 { int flag = 0; if( isdirection ) { for(vector<node>::iterator iter = mymap[u].begin(); iter != mymap[u].end(); ) { if((*iter).v == v) { mymap[u].erase(iter); iter = mymap[u].begin(); flag ++; } else { iter++; } } } else { for(vector<node>::iterator iter = mymap[u].begin(); iter != mymap[u].end(); ) { if((*iter).v == v) { mymap[u].erase(iter); iter = mymap[u].begin(); flag++; } else { iter++; } } for(vector<node>::iterator iter = mymap[v].begin(); iter != mymap[v].end(); ) { if((*iter).v == u) { mymap[v].erase(iter); iter = mymap[v].begin(); flag++; } else { iter++; } } } return flag;}//更新一条边 更新起点为u,终点为v的边权值为w bool updatenode(int u, int v, int w, bool isdirection){ bool flag = false; if( isdirection ) { for(vector<node>::iterator iter = mymap[u].begin(); iter != mymap[u].end(); iter++) { if((*iter).v == v) { (*iter).w = w; flag = true; break; } } } else { for(vector<node>::iterator iter = mymap[u].begin(); iter != mymap[u].end(); iter++) { if((*iter).v == v) { (*iter).w = w; flag++; break; } } for(vector<node>::iterator iter = mymap[v].begin(); iter != mymap[v].end(); iter++) { if((*iter).v == u) { (*iter).w = w; flag++; break; } } } return flag;}//查找在u为起点的边中权值最大或者权值最小的顶点和权值// choose等于1时表示查找最大值,等于2时表示查找最小值 //接收的结果要free!!!!!!!!!!!!!!!!!! int * serachnode(int u, int choose){ int * res = (int *) malloc(sizeof(int)*2); int max = -INF; int flag; int min = INF; if(choose == 1) { for(vector<node>::iterator iter = mymap[u].begin(); iter != mymap[u].end(); iter++) { if( (*iter).w > max) { max = (*iter).w; flag = (*iter).v; } } res[0] = flag; res[1] = max; } else if(choose == 2) { for(vector<node>::iterator iter = mymap[u].begin(); iter != mymap[u].end(); iter++) { if( (*iter).w < min) { min = (*iter).w; flag = (*iter).v; } } res[0] = flag; res[1] = min; } return res;}
通用邻接表---vector实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。