⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adj_list.cpp

📁 中文分词, N-最短路径算法 ICTCLAS研究学习组 http://groups.google.com/group/ictclas?msg=subscribe
💻 CPP
字号:
#include ".\adj_list.h"

#include <algorithm>
#include <crtdbg.h>

using namespace std;

static edge_vect g_vEmpty;
//static edge_it_pair 


adj_list::adj_list(adj_list_type eType)
{
	m_eType =  eType;
}

adj_list::~adj_list(void)
{
}

bool adj_list::hasInEdge()
{
	return   (eInEdge_Only == m_eType) || (eInOutEdge == m_eType);
}
bool adj_list::hasOutEdge()
{
	return   (eOutEdge_Only == m_eType) || (eInOutEdge == m_eType);
}

size_t  adj_list::get_vert_count()
{
	if(hasInEdge())
	{
		return m_InEdgeMap.size()+1;
	}
	else
	{
		return m_OutEdgeMap.size()+1;
	}
}

void adj_list::addEdge(const edge& eNew)
{
	if(hasInEdge())
	{		
		addEdge(m_InEdgeMap, eNew.m_iT, eNew);
	}

	if(hasOutEdge())
	{
		addEdge(m_OutEdgeMap, eNew.m_iS, eNew);
	}
}

void adj_list::addEdge(edge_map& map1, NODE_ID_TYPE iNode, const edge& eNew)
{
	edge_map_iterator it = map1.find(iNode);
	if(it==map1.end())
	{
		edge_vect vectNew;
		vectNew.push_back(eNew);
		map1[iNode] =  vectNew;
	}
	else
	{
		it->second.push_back(eNew);
	}
}

edge_it_pair adj_list::in_edges(NODE_ID_TYPE nodeTarget)
{
	edge_map_iterator it = m_InEdgeMap.find(nodeTarget);
	if(it==m_InEdgeMap.end())
	{
		return make_pair(g_vEmpty.end(), g_vEmpty.end());
	}
	else
	{
		return make_pair(it->second.begin(), it->second.end());
	}

}
edge_it_pair adj_list::out_edges(NODE_ID_TYPE nodeSource)
{
	edge_map_iterator it = m_OutEdgeMap.find(nodeSource);
	if(it==m_OutEdgeMap.end())
	{
		return make_pair(g_vEmpty.end(), g_vEmpty.end());
	}
	else
	{
		return make_pair(it->second.begin(), it->second.end());
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -