#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <vector>
#include <list>
#include <queue>
#include <deque>
#include <stack>
#include <string>
#include <algorithm>
#include <cassert>
#include <cctype>
using namespace std;
///图, 碎片, 环, 面以及道路的存储结构
typedef vector< list<int>* > graph;
typedef vector< list<int>* > fragment;
typedef list<int> circle; ///环用链表表示, 链表按顺时针记录环的点
typedef list<int> face; ///面用链表表示即可, 链表按顺时针记录面的点
typedef list<int> path;
const int MAXINT = ((unsigned)-1)>>1;
const int MAXPOINTCOUNT = 200;
int colour[MAXPOINTCOUNT]; ///为遍历设置的数组
const int WHITE = 0;
const int GRAY = 1;
const int BLACK = 2;
int parent[MAXPOINTCOUNT]; ///为遍历设置的数组
int depth[MAXPOINTCOUNT];
int pointKind[MAXPOINTCOUNT];
const int EMBEDED = -1;
const int AVAILABLE = 0;
bool pointEmbed[MAXPOINTCOUNT];
bool edgeEmbed[MAXPOINTCOUNT][MAXPOINTCOUNT];
int lowpoint[MAXPOINTCOUNT]; ///为找割点设置的数组
int lowneighbour[MAXPOINTCOUNT];
int pointType[MAXPOINTCOUNT];
const int NONCUTVERTEX = 0;
const int CUTVERTEX = 1;
int leave[MAXPOINTCOUNT];
int enter[MAXPOINTCOUNT];
int visitTime;
void removeBidegreePoint(graph *g) {}
void removeSingleDegreePoint(graph *g) {}
void removeParallelEdge(graph *g) {}
graph* createGraph(int pointCount)
{
graph* g = new graph;
for (int i=0; i<pointCount; i++) {
g->push_back(new list<int>);
}
return g;
}
graph* inputGraph(void)
{
int pointCount, edgeCount, from, to;
printf("请输入顶点个数:");
cin >> pointCount;
printf("\n请输入边的条数: ");
cin >> edgeCount;
graph *g = createGraph(pointCount);
cout<<"\n请输入图的信息:"<<endl;
for (int i=0; i<edgeCount; i++)
{
cin >> from >> to;
g->at(from)->push_back(to);
g->at(to)->push_back(from);
}
return g;
}
circle* getOneCircle(const graph *g, int start)
{
int pointCount = g->size();//图的节点数
for (int i=0; i<pointCount; i++)
{
colour[i] = WHITE;
}
queue<int> q;
q.push(start);
colour[start] = GRAY;
parent[start] = -1;
depth[start] = 0;
list<int>::iterator tra;
list<int>::iterator end;
int u,v;
///对图进行一次广度优先遍历即可以找到一个环
while (!q.empty())
{
u = q.front(); q.pop();
tra = g->at(u)->begin();
end = g->at(u)->end();
for (; tra != end; tra++)
{
v = *tra;//解引用操作
if (colour[v] == WHITE)
{
q.push(v);
colour[v] = GRAY;
parent[v] = u;
depth[v] = depth[u]+1;
}
///广度优先树的某一片树叶有在队列中的邻居, 则可以找到一个环
else if (colour[v] == GRAY)
{
goto buildTheCircle;
}
}
colour[u] = BLACK;
}
assert(!q.empty());
///从树叶结点u和邻
新闻网页贴吧知道音乐图片视频地图百科文库 ...21 ~0~ 一、设计目的利用 Visual C++设计二维平面...继承关系很简单,就有一个基类 CShape 和几个派生类...
确定对象:名词短语(候选者)显示器荧光屏:一种输出...( 程序设计( C++) )自定义数据类型 enum Boolean ... cs3简单制作动态搞笑图片 81份文档 笑话大全集 ...
新闻网页贴吧知道音乐图片视频地图百科文库 ... 一个可平面图与其平面嵌入图拓扑同构, 因此我们将...Jordan曲线 平面上的简单闭曲线(自身不相交封闭曲 ...
平面图的必要条件:欧拉公式 适用于简单图的欧拉...均不在当中相交,则 称该图形是G的一个平面嵌入,...(c=1; c≤n; c++) if vi 的邻点没用颜色c ...
判断鼠标两次点击的图片能否消去,即图片是否相同且...《C++课程设计》 图 1.2 在创建过程的第一步 “...个有坐标位置属性的平面, 平面上零散地分布着若干个...
C++习题答案_电脑基础知识_IT/计算机_专业资料。4...判断一个整数是否为素数用一个函数来实现。 5-5 ...13-7 定义描述平面上一个带内的类point,重载“++...
怎样绘制一张 校园布局平面图?不同 的图形各有什么...上面看一些简单几何体或它们的组 合得到平面图形. ...这是一个工件的立体图,设计师们常常画出从不同方...
新闻网页贴吧知道音乐图片视频地图百科文库 ...设计你的学校的校园平面图,所含景点不少于 10 个...(一)功能要求:用 c/c++设计一系统,能提供下列服务...
如果直接利用图 像点阵进行搜索判断显然难以实现, ...将上述结论推广到任意平面图像上可知, 图像上任意...它由一系列 C 函数和少量 C++ 类 构成,实现了...
[i].name << endl; } 3.使用结构表示 X—Y 平面直角坐标系上的点,编写程序顺序读入一个四边形的四个顶点坐标,判别 由这四个顶点的连线构成的图形是否为正...
热门文档