- 浏览: 203250 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
zhuchao_ko:
有用的废话。。。
架构与产品 -
450029462:
java学好了 c++其实也不难,就是 宏多点 内存控制多点 ...
从java转向C\c++开发要学会些什么 -
ldlzagg:
...
启示2013 -
raojl:
书是买了, 一直没时间捣鼓!
我发现开始喜欢Python了 -
raojl:
回过头看了看也不全然对啊,呵呵!
IT行业发展‘VIA’模式探讨
StatusGrap.cpp
StatusGrap.h
大家帮忙看看 << 和 >>重载有问题呢?
StdStudy.obj : error LNK2001: unresolved external symbol "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class StatusGraph<char> &)" (??5@YAAAV?$basi
c_istream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$StatusGraph@D@@@Z)
D:\StdStudy\StdStudy.cpp(30) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class StatusGraph<char>' (or there is no acceptable conversion)
Error executing cl.exe.
Creating browse info file...
全是迭代,厉害个毛!有空帮我看看问题!
// StatusGraph.cpp: implementation of the StatusGraph class. // ////////////////////////////////////////////////////////////////////// #include "StdAfx.h" #include "StatusGraph.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// /* template<typename vertex> StatusGraph<vertex>::~StatusGraph() {}*/ template<typename vertex> void StatusGraph<vertex>::erase_vertex(const vertex& v){ adj_map::iterator m_iter = adj_map.find(v); if(m_iter == adj_map.end() ) return ; adj_map.erase(m_iter); m_iter =adj_map.begin(); while (m_iter !=adj_map.end()) { list<dest_vertex<vertex> > & edge_list = (*m_iter).second; list<dest_vertex<vertex> >::iterator list_iter = edge_list.begin(); for (;list_iter != edge_list.end();list_iter ++) { if ( (*list_iter).dest == v ) { edge_list.erase(list_iter); break; } } m_iter++; } } template<typename vertex> int StatusGraph<vertex>::edge_count(){ int count =0; graphMap::iterator m_iter = adj_map.begin(); for (;m_iter != adj_map.end();m_iter ++) { count += (*m_iter).second.size(); } if (d) return count; else return count / 2 ; } template<typename vertex> int StatusGraph<vertex>::get_weight(const vertex &v1,const vertex &v2){ graphMap::iterator iter =adj_map.find(v1); if (iter != adj_map.end() && adj_map.find(v2) != adj_map.end()) { list<dest_vertex<vertex> >& edge_list = (*iter).second; list<dest_vertex<vertex> >::iterator list_iter = edge_list.begin(); while(list_iter != edge_list.end()){ if ((*list_iter).dest == v2) { return (*list_iter).weight; } list_iter++; } } return -1; } template<typename vertex> void StatusGraph<vertex>::insert_edge(const vertex &v1,const vertex &v2,const int& weight){ if (contains_edge(v1,v2)) return; insert_vertex(v1); insert_vertex(v2); list<dest_vertex<vertex> > & e_list1 = (*(adj_map.find(v1)) ).second; e_list1.push_back(dest_vertex<vertex>(v2,weight)); if (d) { return ; } list<dest_vertex< vertex> >& e_list2 = (*(adj_map.find(v2))).second; e_list2.push_back(dest_vertex<vertex>(v1,weight)); } template<typename vertex> void StatusGraph<vertex>::erase_edge(const vertex& v1,const vertex&v2){ graphMap::iterator iter = adj_map.find(v1); if (iter == adj_map.end() || adj_map.find(v2) == adj_map.end()) { return ;// no node v1\v2 } list<dest_vertex<vertex> >& e_list1 = (*iter).second; list<dest_vertex<vertex> >::iterator list_iter = e_list1.begin(); for (; list_iter != e_list1.end(); list_iter ++) { if ((*list_iter).dest == v2 ) { found = true; e_list1.erase(list_iter); break; } } if (d || !found) return; iter = adj_map.find(v2); list<dest_vertex<vertex> >& e_lsit2 = (*iter).second; list_iter = e_lsit2.begin(); for (; list_iter != e_lsit2.end();list_iter ++) { if ((*list_iter).dest == v1) { e_lsit2.erase(list_iter); break; } } } template<typename vertex> bool StatusGraph<vertex>::contains_edge(const vertex &v1,const vertex &v2){ graphMap::iterator iter = adj_map.find(v1); if (iter != adj_map.end() && adj_map.find(v2) ! = adj_map.end()) { list<dest_vertex<vertex> >& edge_list = (*iter).second; list<dest_vertex<vertex> >::iterator list_iter = edge_list.begin(); for (;list_iter != edge_list.end(); list_iter ++) { if((*list_iter).dest == v2) return true; } } return false; } template<typename vertex> istream& operator>>(istream&istr,StatusGraph<vertex> &g){ cout << "待实现!" <<endl; return istr; } template<typename vertex> ostream& operator<<(ostream&ostr,const StatusGraph<vertex>&g){ g.output(); return ostr; } template<typename vertex> void StatusGraph<vertex>::output() const{ cout << "待实现!" <<endl; }
StatusGrap.h
#if !defined(AFX_STATUSGRAPH_H__239AC296_43C3_4CD4_A788_91E56564168C__INCLUDED_) #define AFX_STATUSGRAPH_H__239AC296_43C3_4CD4_A788_91E56564168C__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include <map> #include <list> #include <string> #include <iostream> using namespace std; enum gkind {undigraph,digraph}; template<typename vertex> struct dest_vertex { vertex dest;//顶点 int weight;//权重 dest_vertex(const vertex& x,const int& wet) { dest = x; weight =wet; } bool operator > (const dest_vertex<vertex> &e) const { return weight > e.weight; } }; template<typename vertex> class StatusGraph { public: StatusGraph(gkind t = digraph):d(t){} /* * */ StatusGraph(const StatusGraph& g){ adj_map = g.adj_map; } /* * */ ~StatusGraph(){}; /** * return this graph's size. */ int size(){ return adj_map.size(); } /** * return this graph is empty or not ! */ bool empty(){ return adj_map.size() == 0; } /** * check a vertex is own to the container or not . */ bool contain_vertex(const vertex &v){ return adj_map.find(v) != adj_map.end(); } /* * insert a vertex into the container. */ void insert_vertex(const vertex& v) { if (adj_map.find(v)) == adj_map.end() ) { adj_map[v] = list<dest_vertex<vertex>>(); } } /** * @author raojl * @desc: what node you want to delete * @Edit 2010.06.20 */ void erase_vertex(const vertex& v); /* * */ int edge_count(); /* * */ bool contains_edge(const vertex &v1,const vertex &v2); /* * */ int get_weight(const vertex &v1,const vertex &v2); /* * */ void insert_edge(const vertex &v1,const vertex &v2,const int& weight); /* * */ void erase_edge(const vertex &v1,const vertex &v2); /* * */ list<dest_vertex<vertex> > get_incident_edges(const vertex & v)const { return (*adj_map.find(v)).second; } /* * */ vertex first_vertex(){ return (*adj_map.begin()).first; } public: friend istream& operator>>(istream&istr,StatusGraph<vertex>& g); friend ostream& operator<<(ostream&ostr,const StatusGraph<vertex> &g); //void dfs_traversal();//深度优先搜索 //void bfs_traversal();//广度优先搜索 private: typedef map<vertex,list< dest_vertex<vertex> > > graphMap; graphMap adj_map; gkind d; //list<vertex> dfs(vertex& start,map<vertex,bool>* visited); //list<vertex> bfs(vertex& start,map<vertex,bool>* visited); void output() const; }; #endif // !defined(AFX_STATUSGRAPH_H__239AC296_43C3_4CD4_A788_91E56564168C__INCLUDED_)
int main(int argc, char* argv[]) { typedef char vertex; StatusGraph<vertex> tt(digraph); cin>>tt; cout << tt; return 0; }
大家帮忙看看 << 和 >>重载有问题呢?
StdStudy.obj : error LNK2001: unresolved external symbol "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class StatusGraph<char> &)" (??5@YAAAV?$basi
c_istream@DU?$char_traits@D@std@@@std@@AAV01@AAV?$StatusGraph@D@@@Z)
D:\StdStudy\StdStudy.cpp(30) : error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'class StatusGraph<char>' (or there is no acceptable conversion)
Error executing cl.exe.
Creating browse info file...
评论
2 楼
raojl
2010-06-28
lijinyan3000 写道
这些代码自己实现的?
厉害!!
水平很高了!
厉害!!
水平很高了!
全是迭代,厉害个毛!有空帮我看看问题!
1 楼
lijinyan3000
2010-06-28
这些代码自己实现的?
厉害!!
水平很高了!
厉害!!
水平很高了!
发表评论
-
服务端口快扫shell
2014-08-25 11:50 648#set -x var_start=8000 arra ... -
远程批量部署
2014-07-29 11:50 556#!/usr/bin/expect -- if ... -
linux 下建立异步链接
2014-05-07 11:59 508int32_t SockEndPoint::connect_ ... -
atomic笔记
2013-12-11 11:43 332inline void ice_atomic_set(ic ... -
求最大公共子串
2013-07-15 11:21 658#include <stdio.h> #inc ... -
日志记录
2013-01-14 09:25 674[root@localhost Capserver]# ... -
c开发笔记
2012-02-03 09:36 6391、就是有大量的输入参数或输出参数需要一次性交换时,可以考虑定 ... -
编译校验【代码笔记】
2011-06-17 09:07 5351、版本编译控制(比如多项目) 2、编译校验 3、s ... -
GCC注意笔记
2011-02-22 18:38 675大多数程序和库在编译 ... -
gsoap编写webservice应用
2010-06-01 15:02 2081The gSOAP tools minimize applic ... -
setsockopt 笔记
2010-04-22 15:12 7491、TCP_NODELAY是唯一使用IPPROTO_TCP层的 ... -
随录-增量记录
2010-02-25 10:41 620程序开发,对于日志的记录需要主要以下几个问题。 1、多线程或 ... -
快速入门sqlite内存数据库,用sqlite构建一日志工具
2009-12-25 11:28 3660今天上午无意在搜索的时候发现很多应用程序用了sqllite,o ... -
dos脚本+ftp实现快速升级
2009-12-25 09:52 1411cd \ ;写ftpget.src文件,存储ftp命令。该文件 ... -
花三分钟看看这个文档
2009-11-30 19:14 728linux 命令精简 Unix/Linux Command ... -
推荐一款xml分析微型库tinyxml
2009-08-22 08:16 1251tinyxml,至所以叫tin,就是短小精悍。搭配前面讲的gs ... -
用gsoap编写webservice客户端接口dll的方法案例
2009-08-22 07:55 28521)使用手册:见http://gsoap2.source ... -
命令随写
2009-08-13 16:22 689ocrale启动监听:lsnrctl start 启动服务:o ... -
LUA 分析文件
2009-06-02 14:07 1066BUFSIZE = 2^13 -- 8K ... -
避免对指针和数字类型重载
2009-05-22 14:17 739条款25: 避免对指针和数字类型重载 快速抢答: ...
相关推荐
采用邻接表来实现图的存储,并输入输出邻接表的信息,并用邻接表来实现图的广度优先遍历。
邻接链表实现图的操作,具体操如下: 1. 创建图; 2. 销毁图; 3. 清空图; 4. 加入边; 5. 删除边; 6. 获取权; 7. 获取结点的度; 8. 获取图的结点数; 9. 获取图的边数。
图的邻接表实现,用邻接矩阵实现了图,基本操作,主要算法
C++实现图的邻接表,利用了类模板,可以构建有向图和无向图,包含链表、图的ADT,里面附有说明文档,详细说明了主程序的测试方式。
《数据结构与算法(C++版)》先关 邻接表表示的图的广度优先遍历的动画演示
图的邻接矩阵和邻接表实现, 深度搜索, 广度搜索, Dijstra最短路径
实现图的深度和广度优先搜索 /* 邻接表的结点类型 */ typedef struct arc {int adjvex; struct arc *next;}ArcNode; typedef struct VexNode {int vertex; ArcNode *firstarc; }VerNode; typedef VerNode ...
用邻接表实现图的数据结构,链表方式实现,win32+vs2013
1、 定义邻接表存储的图类。 2、 实验验证如下算法的正确性、各种功能及指标: 1)创建一个邻接表存储的图; 2)返回图中指定边的权值; 3)返回图中某顶点的第一个邻接顶点; 4)返回图中某顶点关于另一个顶点的下...
很不错的啊 邻接多重表实现的,功能很多的
通过输入顶点数和边数,自动构造用邻接表表示的图,并显示。
建立有向图的邻接表更简单,每当读人一个顶点对序号 ,j> 时,仅需生成一个邻接序号为j的边表结点,将其插入到vj的出边表头部即可。 同时没个节点带权访问。 邻接表的形式说明 typedef struct node{//边表结点 ...
Dijkstra算法C++邻接表实现,用邻接表存图,还有记录路径。
图的邻接矩阵存储和邻接表存储 代码完整 有注释,有需要的可以下载看看,基本是图的邻接矩阵存储和邻接表存储 代码完整
使用邻接表实现图结构,无向的、有向的、无权的和有权的都可支持。
是图的着色问题的基础 用邻接表存储图的结构
静态邻接表的具体实现代码 静态邻接表的具体实现代码
数据结构中用邻接表求解迷宫问题,该算法运用了简单的原理,但是非常实用的解决了迷宫问题
领会图的两种主要存储结构、图基本运算算法和两种遍历算法设计内容:编写一个程序,设计带权图的邻接矩阵与邻接表的创建和输出运算,并在此基础上设计一个主程序完成如下功能:(1)建立如图所示的有向图G的邻接矩阵...
分别以邻接矩阵和邻接表的方式实现图的深度优先搜索、广度优先搜索