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; }
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; }