亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? graph.cc

?? C語言前端編譯器,yacc/lex編寫,可自行修改代碼.
?? CC
?? 第 1 頁 / 共 2 頁
字號:
// Copyright 2000 by Robert Dick.
// All rights reserved.

#include "Graph.h"

#include <functional>
#include <algorithm>
#include <typeinfo>
#include <iostream>

/*###########################################################################*/
RawGraph &
RawGraph::operator=(const self & a) {
	vertex_ = a.vertex_;
	edge_ = a.edge_;
	return *this;
}


/*===========================================================================*/
RawGraph::vertex_index RawGraph::add_vertex() {
	vertex_type new_vertex;
	vertex_.push_back(new_vertex);

	RDEBUG(self_check());
	return vertex_.size() - 1;
}

/*===========================================================================*/
RawGraph::edge_index RawGraph::
add_edge(const vertex_index from, const vertex_index to) {
	edge_.push_back(edge_type(from, to));

	edge_index e = edge_.size() - 1;
	vertex(to)->in_.push_back(e);
	vertex(from)->out_.push_back(e);

	RDEBUG(self_check());
	return e;
}

/*===========================================================================*/
void RawGraph::erase_vertex(const vertex_index i) {
// Erase all of the connected edges.
	vertex_iterator v = vertex(i);

	while (! v->in_.empty()) {
		erase_edge(v->in_.back());
	}

	while (! v->out_.empty()) {
		erase_edge(v->out_.back());
	}

// Erase the vertex.
	vertex_.erase(v);

// Fix all of the other vertex indices.
	MAP(x, edge_.size()) {
		vertex_index & to = edge_[x].to_;
		vertex_index & from = edge_[x].from_;

		if (to > i) {
			--to;
		}

		if (from > i) {
			--from;
		}
	}
	RDEBUG(self_check());
}

/*===========================================================================*/
void RawGraph::erase_edge(const edge_index i) {
// Fix connected vertices.
	vertex_type & parent = *vertex(edge(i)->from());
	vertex_type & child = *vertex(edge(i)->to());

	edge_index * parent_edge = find(parent.out_.begin(), parent.out_.end(), i);
	edge_index * child_edge = find(child.in_.begin(), child.in_.end(), i);

	parent.out_.erase(parent_edge);
	child.in_.erase(child_edge);

// Erase the edge.
	edge_.erase(edge(i));

// Fix all the other edge indices.
	MAP(x, vertex_.size()) {
		RVector<edge_index> & out = vertex_[x].out_;
		MAP(y, out.size()) {
			RASSERT(out[y] != i);
			if (out[y] > i) {
				--out[y];
			}
		}

		RVector<edge_index> & in = vertex_[x].in_;
		MAP(y, in.size()) {
			RASSERT(in[y] != i);
			if (in[y] > i) {
				--in[y];
			}
		}
	}
	RDEBUG(self_check());
}

/*===========================================================================*/
void RawGraph::pack_memory() {
	RVector<vertex_type> v(vertex_);
	RVector<edge_type> e(edge_);
	vertex_.rswap(v);
	edge_.rswap(e);
}

/*===========================================================================*/
void RawGraph::clear() {
	vertex_.clear();
	edge_.clear();
	RDEBUG(self_check());
}

/*===========================================================================*/
void RawGraph::rswap(RawGraph & rg) {
	vertex_.rswap(rg.vertex_);
	edge_.rswap(rg.edge_);
	RDEBUG(self_check());
	RDEBUG(rg.self_check());
}

/*===========================================================================*/
void RawGraph::print_to(ostream & os) const {
	MAP(x, vertex_.size()) {
		os << "vertex " << x;
		vertex_[x].print_to(os);
		os << "\n";
	}

	MAP(x, edge_.size()) {
		os << "edge " << x;
		edge_[x].print_to(os);
		os << "\n";
	}
}

/*===========================================================================*/
bool RawGraph::cyclic() const {
	MAP(start, vertex_.size()) {
		RVector<big_bool> visited(vertex_.size(), false);
		if (cyclic_recurse(visited, start, start))
			return true;
	}
	return false;
}

/*===========================================================================*/
bool RawGraph::
connected(const vertex_index start, bool reverse_i) const {
	RVector<vertex_index> vec = dfs(start, reverse_i);
	return vec.size() == vertex_.size();
}

/*===========================================================================*/
bool RawGraph::
nodes_linked (vertex_index a, vertex_index b) const {
	MAP (x, vertex(a)->size_out()) {
		if (edge(vertex(a)->out(x))->to() == b) {
			return true;
		}
	}
	MAP (x, vertex(b)->size_out()) {
		if (edge(vertex(b)->out(x))->to() == a) {
			return true;
		}
	}
	return false;
}

/*===========================================================================*/
const RVector<RawGraph::vertex_index> RawGraph::
dfs(const vertex_index start, bool reverse_i) const {
	RVector<vertex_index> vec;
	RVector<big_bool> visited(vertex_.size(), false);
	dfs_recurse(vec, visited, start, reverse_i);
	return vec;
}

/*===========================================================================*/
const RVector<RawGraph::vertex_index>
RawGraph::dfs(RVector<vertex_index> start, bool reverse_i) const {
	RVector<vertex_index> vec;
	RVector<big_bool> visited(vertex_.size(), false);

	MAP(x, start.size()) {
		dfs_recurse(vec, visited, start[x], reverse_i);
	}

	return vec;
}

/*===========================================================================*/
const RVector<RawGraph::vertex_index>
RawGraph::bfs(const vertex_index start, bool reverse_i) const {
	RVector<vertex_index> vec;
	RVector<big_bool> visited(vertex_.size(), false);
	bfs_recurse(vec, visited, start, reverse_i);
	return vec;
}

/*===========================================================================*/
const RVector<RawGraph::vertex_index>
RawGraph::bfs(RVector<vertex_index> start, bool reverse_i) const {
	RVector<vertex_index> vec;
	RVector<big_bool> visited(vertex_.size(), false);

	MAP(x, start.size()) {
		bfs_recurse(vec, visited, start[x], reverse_i);
	}

	return vec;
}

/*===========================================================================*/
const RVector<RawGraph::vertex_index> RawGraph::
top_sort(const vertex_index start, bool reverse_i) const {
	RVector<vertex_index> vec;
	RVector<big_bool> visited(vertex_.size(), false);

// For now, allow only source or sink start nodes.
	RASSERT(reverse_i && ! vertex_[start].size_out() ||
		! reverse_i && ! vertex_[start].size_in());

// Figure out which nodes can be reached.
	dfs_recurse(vec, visited, start, reverse_i);

// Invert to pre-visit nodes which can't be reached.
	transform(visited.begin(), visited.end(), visited.begin(),
	  logical_not<big_bool>());

	vec.erase(vec.begin(), vec.end());

	top_sort_recurse(vec, visited, start, reverse_i);
	return vec;
}

/*===========================================================================*/
const RVector<RawGraph::vertex_index> RawGraph::
top_sort(const RVector<vertex_index> & start, bool reverse_i) const {
	RVector<vertex_index> vec;
	RVector<big_bool> visited(vertex_.size(), false);

// Figure out which nodes can be reached.
	MAP(x, start.size()) {
// For now, allow only source or sink start nodes.
		RASSERT(reverse_i && ! vertex_[start[x]].size_out() ||
			! reverse_i && ! vertex_[start[x]].size_in());

		dfs_recurse(vec, visited, start[x], reverse_i);
	}

// Invert to pre-visit nodes which can't be reached.
	transform(visited.begin(), visited.end(), visited.begin(),
	  logical_not<big_bool>());
	vec.erase(vec.begin(), vec.end());

	MAP(x, start.size())
		top_sort_recurse(vec, visited, start[x], reverse_i);

	return vec;
}

/*===========================================================================*/
const RVector<RawGraph::vertex_index> RawGraph::
RawGraph::outward_crawl(const vertex_index start) const {
	RVector<vertex_index> vec;
	RVector<big_bool> visited(vertex_.size(), false);
	outward_crawl_recurse(vec, visited, start);
	return vec;
}

/*===========================================================================*/
const RVector<int>
RawGraph::max_depth(const vertex_index start, bool reverse_i) const {
// Warning: This method has not been well-tested.
Rabort();

	RVector<int> vec(vertex_.size(), -1);
	RVector<big_bool> visited(vertex_.size(), false);

// Figure out which nodes can be reached.
	RVector<vertex_index> scratch;
	dfs_recurse(scratch, visited, start, reverse_i);
	scratch.erase(scratch.begin(), scratch.end());

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品福利一区| 日韩免费视频一区二区| 亚洲午夜免费视频| 日韩女优电影在线观看| 91老师国产黑色丝袜在线| 日韩电影免费在线观看网站| 国产精品久久精品日日| 日韩欧美一级二级三级| 欧美午夜理伦三级在线观看| 成人a区在线观看| 久久国产人妖系列| 亚洲国产精品麻豆| 中文字幕一区二区三区四区不卡 | 欧洲视频一区二区| 国产美女精品一区二区三区| 午夜不卡在线视频| 亚洲图片另类小说| 国产香蕉久久精品综合网| 欧美一区二区福利视频| 在线日韩一区二区| 99九九99九九九视频精品| 国产美女在线精品| 美国三级日本三级久久99| 性做久久久久久免费观看欧美| 国产日韩精品一区二区三区| 欧美tickling挠脚心丨vk| 欧美福利一区二区| 欧美性xxxxxxxx| 96av麻豆蜜桃一区二区| 寂寞少妇一区二区三区| 麻豆精品国产传媒mv男同| 青草av.久久免费一区| 亚洲福利视频一区二区| 亚洲一线二线三线久久久| 亚洲色图都市小说| 一区二区三区中文在线观看| 椎名由奈av一区二区三区| 亚洲国产高清aⅴ视频| 国产片一区二区| 欧美激情艳妇裸体舞| 欧美国产一区二区在线观看| 国产日韩欧美一区二区三区综合| 久久久久久久久久久黄色| 久久美女艺术照精彩视频福利播放| 精品成人a区在线观看| 久久久久国产精品免费免费搜索| 久久久精品免费免费| 欧美精彩视频一区二区三区| 中文字幕av一区 二区| 国产精品国产三级国产普通话99| 中文字幕日韩一区二区| 亚洲另类一区二区| 亚洲自拍偷拍网站| 天堂资源在线中文精品| 日本欧美加勒比视频| 激情综合五月婷婷| 粉嫩av一区二区三区在线播放| 成人av网站在线观看免费| eeuss国产一区二区三区| 色综合天天综合色综合av| 欧美性色黄大片手机版| 欧美一区二区三区四区五区| 精品区一区二区| 国产精品全国免费观看高清| 亚洲品质自拍视频网站| 亚洲午夜在线视频| 青青草原综合久久大伊人精品| 久久疯狂做爰流白浆xx| 国产成人精品免费视频网站| 色天使久久综合网天天| 欧美日韩不卡在线| 久久九九影视网| 亚洲黄色av一区| 男人的天堂亚洲一区| 成人高清免费观看| 欧美性受xxxx| 国产偷国产偷亚洲高清人白洁| 亚洲欧美日韩综合aⅴ视频| 视频在线观看一区| 丁香天五香天堂综合| 日本高清免费不卡视频| 91精品国产91久久久久久最新毛片| 亚洲精品在线电影| 亚洲综合视频网| 国产一区二区女| 色狠狠桃花综合| 欧美videos中文字幕| 亚洲欧洲日韩女同| 六月婷婷色综合| 色www精品视频在线观看| 日韩欧美一级特黄在线播放| 亚洲视频网在线直播| 免费看欧美女人艹b| 93久久精品日日躁夜夜躁欧美| 欧美一区二区三区啪啪| 亚洲视频香蕉人妖| 国产自产2019最新不卡| 在线观看不卡一区| 国产白丝精品91爽爽久久| 欧美午夜寂寞影院| 久久久777精品电影网影网| 性做久久久久久免费观看欧美| 高清国产一区二区三区| 91精品国产色综合久久久蜜香臀| 国产精品久久久久久久久久久免费看 | 国产一区二区视频在线| 欧美日韩一区二区三区四区五区| 国产偷国产偷精品高清尤物| 美女视频黄频大全不卡视频在线播放| 99九九99九九九视频精品| 久久综合99re88久久爱| 五月天激情综合网| 91福利国产成人精品照片| av一区二区三区| 国产欧美综合在线| 精品一区二区精品| 欧美一区二区三区小说| 五月天视频一区| 色综合久久99| 国产精品国产a| 成人黄色大片在线观看| 国产亚洲综合色| 国产一区二区三区不卡在线观看| 欧美一二三四在线| 日韩精品成人一区二区三区| 欧美亚洲综合一区| 亚洲自拍都市欧美小说| 色婷婷av一区二区三区gif| 亚洲欧美激情插| 亚洲国产一区二区在线播放| av亚洲产国偷v产偷v自拍| 国产精品久久久久久久久果冻传媒| 国产精品综合网| 国产亚洲女人久久久久毛片| 国产一区二区视频在线| 2020国产精品| 国产激情视频一区二区三区欧美| 久久综合网色—综合色88| 蜜桃视频一区二区| 欧美成人r级一区二区三区| 全部av―极品视觉盛宴亚洲| 日本成人在线看| 欧美日韩一区二区三区高清| 亚洲一区在线看| 欧美精三区欧美精三区| 奇米色777欧美一区二区| 日韩你懂的电影在线观看| 麻豆国产精品777777在线| 日韩一二三区不卡| 激情五月激情综合网| 日本一区二区电影| 99久久伊人精品| 亚洲一二三四久久| 欧美高清精品3d| 久久成人免费网| 国产亚洲污的网站| 99国产精品久久久久久久久久| 亚洲欧美aⅴ...| 欧美日韩国产经典色站一区二区三区 | 国产suv精品一区二区883| 国产精品久久看| 在线观看一区二区视频| 青娱乐精品视频| 国产日韩欧美一区二区三区综合| 成人app软件下载大全免费| 亚洲曰韩产成在线| 日韩精品一区二区三区蜜臀| 成人网页在线观看| 一区二区三区国产精品| 日韩免费福利电影在线观看| 国产精品中文有码| 亚洲欧洲日韩在线| 欧美日本一区二区三区四区| 国产一区二区主播在线| ●精品国产综合乱码久久久久| 欧美日韩国产色站一区二区三区| 精品亚洲免费视频| 亚洲女与黑人做爰| 精品国精品自拍自在线| 91成人网在线| 国产一区二区在线观看免费| 亚洲女人****多毛耸耸8| 欧美成人一级视频| 欧美在线一二三四区| 激情偷乱视频一区二区三区| 亚洲视频小说图片| 精品国产精品网麻豆系列| av在线不卡电影| 麻豆91在线看| 亚洲在线视频免费观看| 日本一区二区三区国色天香| 欧美久久久久中文字幕| www.亚洲精品| 九色综合狠狠综合久久| 亚洲小少妇裸体bbw| 国产精品三级av| 精品99999| 欧美一区二区三区精品| 在线一区二区视频| a在线欧美一区|