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

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

?? graph.h

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

#ifndef GRAPH_H_
#define GRAPH_H_

/*###########################################################################*/
#include "RStd.h"
#include "RVector.h"
#include "Interface.h"

#ifdef ROB_DEBUG
#	include <typeinfo>
#endif

#include <iosfwd>

/*###########################################################################*/
// Base data-independent directed graph class.

class RawGraph :
	public Prints<RawGraph>,
	public Clones<RawGraph>,
	public Swaps<RawGraph>,
	public SChecks<RawGraph>
{
	typedef RawGraph self;

public:
// Type safe indexes.

	class vertex_index : public Prints<vertex_index> {
	public:
		vertex_index(long indx) : index_(indx) {}
		operator long() const { return index_; }

		vertex_index & operator++() { index_++; return *this; }
		vertex_index operator++(int);
		vertex_index & operator--() { index_--; return *this; }
		vertex_index operator--(int);
		vertex_index & operator+=(vertex_index i);
		vertex_index & operator-=(vertex_index i);
		void print_to(ostream & os) const { os << index_; }

	private:
			long index_;
	};

	class edge_index : public Prints<edge_index> {
	public:
		edge_index(long indx) : index_(indx) {}
		operator long() const { return index_; }

		edge_index & operator++() { index_++; return *this; }
		edge_index operator++(int);
		edge_index & operator--() { index_--; return *this; }
		edge_index operator--(int);
		edge_index & operator+=(edge_index i);
		edge_index & operator-=(edge_index i);
		void print_to(ostream & os) const { os << index_; }

	private:
			long index_;
	};

	class vertex_type :
		public Prints<RawGraph::vertex_type>,
		public Comps<RawGraph::vertex_type>
	{
		typedef RawGraph::vertex_type self;

	public:
		typedef RVector<edge_index>::iterator edge_iterator;
		typedef RVector<edge_index>::const_iterator const_edge_iterator;

		vertex_type() : out_(), in_() {}
		edge_index size_out() const { return out_.size(); }
		edge_index out(long i) const { return out_[i]; }
		edge_index size_in() const { return in_.size(); }
		edge_index in(long i) const { return in_[i]; }

		edge_iterator begin_out() { return out_.begin(); }
		const_edge_iterator end_out() const { return out_.end(); }

		edge_iterator begin_in() { return in_.begin(); }
		const_edge_iterator end_in() const { return in_.end(); }

		void print_to(ostream & os) const;
		comp_type comp(const self & a) const;

	protected:
			RVector<edge_index> out_;
			RVector<edge_index> in_;

		friend RawGraph;
	};

	class edge_type :
		public Prints<RawGraph::edge_type>,
		public Comps<RawGraph::edge_type>
	{
		typedef RawGraph::edge_type self;

	public:
		vertex_index from() const { return from_; }
		vertex_index to() const { return to_; }

		void print_to(ostream & os) const;

		comp_type comp(const self & et) const;

	protected:
		edge_type(vertex_index from, vertex_index to);

			vertex_index from_;
			vertex_index to_;

		friend RawGraph;
	};

private:
	typedef RVector<vertex_type> v_impl;
	typedef RVector<edge_type> e_impl;

public:
// Typedefs
	typedef ptrdiff_t difference_type;

	typedef v_impl::iterator vertex_iterator;
	typedef e_impl::iterator edge_iterator;
	typedef v_impl::const_iterator const_vertex_iterator;
	typedef e_impl::const_iterator const_edge_iterator;

	typedef v_impl::reverse_iterator reverse_vertex_iterator;
	typedef e_impl::reverse_iterator reverse_edge_iterator;
	typedef v_impl::const_reverse_iterator const_reverse_vertex_iterator;
	typedef e_impl::const_reverse_iterator const_reverse_edge_iterator;

	typedef v_impl::reference vertex_reference;
	typedef e_impl::reference edge_reference;
	typedef v_impl::const_reference const_vertex_reference;
	typedef e_impl::const_reference const_edge_reference;

// Construction
	virtual ~RawGraph() throw() {}
	RawGraph() : vertex_(), edge_() {}
	virtual self & operator=(const self & a);

// Interface
	virtual void rswap(self & rg);
	virtual self * clone() const { return new self(*this); }
	virtual void print_to(ostream & os) const;
	virtual void self_check() const;
	virtual void self_check_deep() const { self_check(); }

// Modifiable
// Invalidates indices.  This is slow, O(v * e).
	virtual void erase_vertex(vertex_index i);

// Invalidates indices.  This is slow, O(v * e).
	virtual void erase_edge(edge_index i);

// Tries to eliminate any padding memory.  Run when size fixed.
	virtual void pack_memory();
	virtual void clear();

// Final
	vertex_index size_vertex() const;
	edge_index size_edge() const;
	vertex_index vertex_offset(const_vertex_iterator x) const;
	edge_index edge_offset(const_edge_iterator x) const;
	vertex_index add_vertex();
	edge_index add_edge(vertex_index from, vertex_index to);

	edge_iterator edge_begin() { return edge_.begin(); }
	const_edge_iterator edge_begin() const { return edge_.begin(); }
	edge_iterator edge_end() { return edge_.end(); }
	const_edge_iterator edge_end() const { return edge_.end(); }

	reverse_edge_iterator edge_rbegin() { return edge_.rbegin(); }
	const_reverse_edge_iterator edge_rbegin() const { return edge_.rbegin(); }
	reverse_edge_iterator edge_rend() { return edge_.rend(); }
	const_reverse_edge_iterator edge_rend() const { return edge_.rend(); }

	vertex_iterator vertex_begin() { return vertex_.begin(); }
	const_vertex_iterator vertex_begin() const { return vertex_.begin(); }
	vertex_iterator vertex_end() { return vertex_.end(); }
	const_vertex_iterator vertex_end() const { return vertex_.end(); }

	reverse_vertex_iterator vertex_rbegin() { return vertex_.rbegin(); }
	const_reverse_vertex_iterator vertex_rbegin() const;
	reverse_vertex_iterator vertex_rend() { return vertex_.rend(); }
	const_reverse_vertex_iterator vertex_rend() const { return vertex_.rend(); }

	vertex_iterator vertex(vertex_index index);
	const_vertex_iterator vertex(vertex_index index) const;
	edge_iterator edge(edge_index index);
	const_edge_iterator edge(edge_index index) const;

// Checks for cycles in the graph.
	bool cyclic() const;

// Confirms that all vertices are connected to start.
	bool connected(vertex_index start, bool reverse = false) const;

// Checks if an edge exists between 2 nodes.
	bool nodes_linked (vertex_index a, vertex_index b) const;

// Returns a DFS-ordered RVector of vertex indices.
	const RVector<vertex_index>
		dfs(vertex_index start, bool reverse = false) const;

	const RVector<vertex_index>
		dfs(RVector<vertex_index> start, bool reverse = false) const;

// Returns a BFS-ordered RVector of vertex indices.
	const RVector<vertex_index>
		bfs(vertex_index start, bool reverse = false) const;

	const RVector<vertex_index>
		bfs(RVector<vertex_index> start, bool reverse = false) const;

// Returns a topological sort-ordered RVector of vertex indices.
	const RVector<vertex_index> top_sort(vertex_index start,
		bool reverse = false) const;

	const RVector<vertex_index> top_sort(const RVector<vertex_index> & start,
		bool reverse = false) const;

// BFS which ignores edge directions.
	const RVector<vertex_index>
		outward_crawl(vertex_index start) const;

// Disconnected vertices will have depths less than 0.
	const RVector<int> max_depth(vertex_index start,
		bool reverse = false) const;

	const RVector<int> max_depth(const RVector<vertex_index> & start,
		bool reverse = false) const;

protected:
	bool cyclic_recurse(RVector<big_bool> & visited,
		vertex_index start, vertex_index branch) const;

	void dfs_recurse(RVector<vertex_index> & vec, RVector<big_bool> & visited,
		vertex_index branch, bool reverse) const;

	void bfs_recurse(RVector<vertex_index> & vec, RVector<big_bool> & visited,
		vertex_index branch, bool reverse) const;

	void top_sort_recurse(RVector<vertex_index> & vec,
		RVector<big_bool> & visited, vertex_index branch,
		bool reverse) const;

	void outward_crawl_recurse(RVector<vertex_index> & vec,
		RVector<big_bool> & visited, vertex_index branch) const;

	void max_depth_recurse(RVector<int> & vec,
		RVector<big_bool> & visited, vertex_index branch,
		bool reverse) const;

private:
		v_impl vertex_;
		e_impl edge_;
};

RawGraph::vertex_index operator+(RawGraph::vertex_index a,
	RawGraph::vertex_index b);

RawGraph::vertex_index operator-(RawGraph::vertex_index a,
	RawGraph::vertex_index b);

RawGraph::edge_index operator+(RawGraph::edge_index a,
	RawGraph::edge_index b);

RawGraph::edge_index operator-(RawGraph::edge_index a,
	RawGraph::edge_index b);

/*===========================================================================*/
// Type-specific directed graph.

template <typename V, typename E>
class Graph :
	public RawGraph
{
	typedef RawGraph super;
	typedef Graph self;

public:
	Graph() : super(), v_data_(), e_data_() {};

// Interface
	virtual void rswap(RawGraph & g);
	virtual self * clone() const { return new self(*this); }
	virtual void self_check_deep() const;

// Modifiable
	virtual vertex_index add_vertex(const V & data);

	virtual edge_index add_edge(vertex_index from,
		vertex_index to, const E & data);

	virtual void erase_vertex(vertex_index i);
	virtual void erase_edge(edge_index i);

	virtual void pack_memory();
	virtual void clear();

// Final
	void print_to_default(ostream & os) const;

	V & operator[](vertex_index i) { return v_data_[i]; }
	const V & operator[](vertex_index i) const { return v_data_[i]; }

	E & operator()(edge_index i) { return e_data_[i]; }
	const E & operator()(edge_index i) const { return e_data_[i]; }

private:
		RVector<V> v_data_;
		RVector<E> e_data_;
};

/*===========================================================================*/
void Graph_test();

/*###########################################################################*/
#include "Graph.cct"
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久色视频免费观看| 久久久精品免费网站| 玉足女爽爽91| 欧美日韩精品一区视频| 蜜臀av在线播放一区二区三区| 欧美一区二区成人| 国产精品亚洲а∨天堂免在线| 亚洲精品免费一二三区| 亚洲成人激情av| 最新日韩av在线| 在线观看91精品国产麻豆| 99在线视频精品| 午夜精品福利视频网站| 亚洲裸体在线观看| 国产色产综合色产在线视频| 精品久久久久一区| 欧美挠脚心视频网站| 日本一区二区高清| 国产欧美一区二区三区在线老狼| 日韩精品中文字幕在线一区| 欧美电视剧在线观看完整版| 亚洲精品日韩综合观看成人91| 石原莉奈在线亚洲二区| 美女视频黄久久| 欧美三日本三级三级在线播放| 欧美丝袜丝交足nylons图片| 欧美自拍偷拍一区| 欧美日韩国产123区| 一区二区激情小说| 蜜桃一区二区三区在线观看| 欧美亚洲国产一卡| 亚瑟在线精品视频| 91高清视频免费看| 日韩三级电影网址| 国产精品久久夜| 五月天久久比比资源色| 欧美日韩成人一区| 亚洲成人av免费| 欧美精品第1页| 经典三级一区二区| 91在线看国产| 欧美一区二区性放荡片| 日韩中文字幕麻豆| 日韩美女在线视频| 99精品桃花视频在线观看| 亚洲欧美一区二区久久| 色94色欧美sute亚洲线路一ni | 一区二区三区在线视频免费观看| 99国内精品久久| 日韩精品亚洲一区二区三区免费| 日韩视频一区在线观看| 盗摄精品av一区二区三区| 欧美三级电影在线看| 日本不卡视频在线| 欧美精品在线一区二区三区| 捆绑调教美女网站视频一区| 欧美影院一区二区| 国产美女娇喘av呻吟久久 | 亚洲精品福利视频网站| 日韩一卡二卡三卡| 欧美唯美清纯偷拍| 国产v日产∨综合v精品视频| 欧美精品久久一区二区三区| 丁香啪啪综合成人亚洲小说| 九九视频精品免费| 日本成人中文字幕| 26uuu久久天堂性欧美| 在线观看精品一区| 91麻豆免费观看| 午夜精品成人在线视频| 国产精品国产三级国产三级人妇| 在线综合+亚洲+欧美中文字幕| 亚洲18影院在线观看| 亚洲人成网站在线| 伊人一区二区三区| 一区二区在线看| 一区二区三区毛片| 一区二区三区欧美日| 中文字幕一区二区视频| 17c精品麻豆一区二区免费| 日本一区二区免费在线| 国产女人aaa级久久久级| 久久久一区二区三区捆绑**| 精品国产三级a在线观看| 国产91在线|亚洲| 国产91在线看| 欧美午夜片在线观看| 欧美一区二区三级| 久久久91精品国产一区二区精品 | 欧美一区二区三区四区五区| 欧美一级xxx| 久久久久久夜精品精品免费| 久久久精品免费免费| 亚洲视频一区二区在线观看| 91精品国产综合久久久久| 日韩欧美国产午夜精品| 国产亚洲一区二区三区| 亚洲自拍欧美精品| 久久综合久久99| 亚洲男女一区二区三区| 美女一区二区三区| gogogo免费视频观看亚洲一| 欧美日韩高清一区二区三区| 欧美大尺度电影在线| 亚洲色图色小说| 国产在线精品一区二区不卡了| 91日韩在线专区| 欧美国产激情二区三区| 奇米综合一区二区三区精品视频 | 日韩一区在线播放| 国产在线视频一区二区三区| 99视频在线精品| www国产亚洲精品久久麻豆| 亚洲成人精品一区二区| 成人av电影在线| 不卡av在线免费观看| 国产免费观看久久| 久久91精品久久久久久秒播| 欧美日韩一区二区欧美激情 | 激情欧美一区二区三区在线观看| 91福利国产成人精品照片| √…a在线天堂一区| 丁香婷婷综合网| 国产精品久久久久久久午夜片 | 欧美系列日韩一区| 午夜在线成人av| 欧美日产国产精品| 午夜精彩视频在线观看不卡| 欧美老肥妇做.爰bbww视频| 日本成人在线电影网| 91麻豆精品91久久久久久清纯| 一区二区激情小说| 日韩精品一区二区三区在线播放| 免费成人在线播放| 九九国产精品视频| 麻豆免费精品视频| 黄页视频在线91| 欧美激情中文字幕一区二区| 在线免费亚洲电影| 日韩欧美区一区二| 亚洲一区二区三区自拍| 精品在线一区二区三区| 在线免费观看日韩欧美| 国产日韩欧美高清| 日本va欧美va精品发布| 色天使久久综合网天天| 91一区二区在线| 91精品国产欧美一区二区成人| 国产精品毛片无遮挡高清| 成人深夜在线观看| 在线成人免费观看| 亚洲国产一区二区三区青草影视 | 久久精品欧美一区二区三区不卡| 亚洲日本丝袜连裤袜办公室| 国产毛片精品视频| 欧美一级黄色片| 日本不卡视频在线| 欧美日韩精品三区| 亚洲精选视频免费看| 99久久精品国产一区| 久久精品免费在线观看| 国内久久婷婷综合| 精品国精品国产| 卡一卡二国产精品| 欧美成人aa大片| 久久99热99| 久久这里都是精品| 国产一区二区免费视频| 久久亚洲私人国产精品va媚药| 久久99久久精品| 久久夜色精品国产噜噜av| 国内成人精品2018免费看| 精品国产电影一区二区| 加勒比av一区二区| 久久久影视传媒| 成人一区二区视频| 亚洲欧洲三级电影| 一本色道久久加勒比精品| 亚洲高清免费视频| 欧美一区二区不卡视频| 久久 天天综合| 日本一区二区免费在线| 97精品电影院| 亚洲五码中文字幕| 欧美一区二区三区不卡| 狠狠狠色丁香婷婷综合久久五月| 26uuu精品一区二区在线观看| 国产99久久精品| 伊人色综合久久天天人手人婷| 欧美性色aⅴ视频一区日韩精品| 午夜精品影院在线观看| 欧美电视剧免费全集观看| 国产不卡视频一区| 亚洲精品日产精品乱码不卡| 欧美高清视频不卡网| 国产乱淫av一区二区三区| 专区另类欧美日韩| 91精品国产综合久久精品性色| 国产一区二区三区四区五区美女| 亚洲色欲色欲www|