C语言结合数据结构的硬币游戏
来源:百度知道 编辑:UC知道 时间:2024/06/14 01:28:12
(1) 任何时候都能翻转中间的硬币 (从正面翻成背面或相反)
(2) 当另外两个硬币都是正面或都是背面的时候能够翻转一端的硬币(从正面翻成背面或相反);
不能通过任何其他方式翻转硬币,如平移它们。但是,只要满足这些规则,你就能够翻转硬币。
(提示:使用无向图,图中每个顶点代表三个硬币的一种状态(8种状态对应8个顶点,一个状态可用一个字符串表示,如”+ - +”表示了一个中间一个硬币是背面朝上,其他两个硬币是正面朝上的状态);当使用其中一条规则能在两个状态之间来回移动时,就通过一个边连接无向图的两个顶点。该游戏使三个硬币从一种状态改变成另外一种状态,其实就是查找相应两个顶点之间路径的问题,该路径只能沿着边进行。)
/************************************************************
每种状态用3位二进制数表示(1为正面,0为背面)
目标状态010
状态转移
000->010/001/100
001->011
010->110/011/000
011->001
100->110
101->111/001/100
110->100
111->011/110/101
用矩阵表示(0本身,1可达,-1不可达)
{ 0, 1, 1,-1, 1,-1,-1,-1},
{-1, 0,-1, 1,-1,-1,-1,-1},
{ 1,-1, 0, 1,-1,-1, 1,-1},
{-1, 1,-1, 0,-1,-1,-1,-1},
{-1,-1,-1,-1, 0,-1, 1,-1},
{-1, 1,-1,-1, 1, 0,-1, 1},
{-1,-1,-1,-1, 1,-1, 0,-1},
{-1,-1,-1, 1,-1, 1, 1, 0},
*************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char A[8][8]={
{ 0, 1, 1,-1, 1,-1,-1,-1},
{-1, 0,-1, 1,-1,-1,-1,-1},
{ 1,-1, 0, 1,-1,-1, 1,-1},
{-1, 1,-1, 0,-1,-1,-1,-1},
{-1,-1,-1,-1, 0,-1, 1,-1},
{-1, 1,-1,-1,