bool GameLogic::SearchPath2(CGraph &graph, int nV0, int nV1) {
	//得到顶点数
	int nVexnum = graph.GetVexnum();
	//遍历图中nV0行,从0列到nVexnum列,值为true的点
	for (int nVi = 0; nVi < nVexnum; nVi++) {
		if (graph.GetArc(nV0, nVi) && !IsExist(nVi)) {
			//压入当前顶点。假设为路径的一个有效顶点
			PushVertex(nVi);
			if (m_nCorner > 2) {
				PopVertex();
				continue;
			}
			if (nVi != nV1) 
			{
				//当中间顶点为空时,表示该条路径不通
				if (graph.GetVertex(nVi) != BLANK) 
				{
					PopVertex();
					continue;
				}
				//如果nVi是一个已消除的点,则判断(nVi,nV1)是否连通
				if (SearchPath2(graph, nVi, nV1)) {
					return true;
				}
			}
			else
			{
				return true;
			}
			PopVertex();
		}
	}
	return false;
}
bool GameLogic::SearchValidPath(CGraph& graph)
{
	//得到顶点数
	int nVexnum = graph.GetVexnum();
	for (int i = 0; i < nVexnum; i++) {
		//得到第一个非空顶点
		//遍历得到第二个同色顶点
		for (int j = 0; j < nVexnum; j++) {
			if (i != j) {
				//如果i和j同色
				int nInfo1 = graph.GetVertex(i);
				int nInfo2 = graph.GetVertex(j);
				if (nInfo1 == nInfo2 && nInfo1 != BLANK && nInfo2 != BLANK) {
					//压入第一个顶点
					PushVertex(i);
					//搜寻两个点之间的连通路径
					if (SearchPath2(graph, i, j)) {
						return true;
					}
					PopVertex();
				}
			}
		}
	}
	return false;
}
Exemple #3
0
bool CGameLogic::IsLink(int anMap[MAX_ROW][MAX_COL],Vertex v1, Vertex v2)
{
	PushVertex(v1);
	//Link is a straight line of horizontal
	if(v1.row == v2.row)
	{
		if(LinkInRow(anMap,v1,v2))
			return true;
		if(TwoCornerLink(anMap,v1,v2))
			return true;
	}

	//link in a straight line of vertical
	else if(v1.col == v2.col)
	{
		if(LinkInCol(anMap,v1,v2))
			return true;
		if(TwoCornerLink(anMap,v1,v2))
			return true;
	}

	else if(OneCornerLink(anMap,v1,v2))
	{
		PushVertex(v2);
		return true;
	}
	else if(TwoCornerLink(anMap,v1,v2))
	{
		return true;
	}
	PopVertex();
	return false;
}
bool GameLogic::IsLink(CGraph &graph, Vertex v1, Vertex v2) {
	int nV1Index = v1.row * MAX_PIC_NUM + v1.col;
	int nV2Index = v2.row * MAX_PIC_NUM + v2.col;

	PushVertex(nV1Index);
	if (SearchPath2(graph, nV1Index, nV2Index)) {
		return true;
	}
	PopVertex();
	//采用线性结构判断方法来对非线性结构判断

	return false;
}