求程序代码,农夫、狼、羊和白菜过河问题.

1个回答

  • #include

    #include

    #include

    #define MAX_STEP 20

    //index:0 - 狼,1-羊,2-菜,3-农夫,value:0-本岸,1-对岸

    int a[MAX_STEP][4];

    int b[MAX_STEP];

    char *name[] =

    {

    "空手",

    "带狼",

    "带羊",

    "带菜"

    };

    void search(int iStep)

    {

    int i;

    if (a[iStep][0] + a[iStep][1] + a[iStep][2] + a[iStep][3] == 4)

    {

    for (i = 0; i < iStep; i++)

    {

    if (a[i][3] == 0)

    {

    printf("%s到对岸n",name[b[i] + 1]);

    }

    else

    {

    printf("%s回本岸n",name[b[i] + 1]);

    }

    }

    printf("n");

    return;

    }

    for (i = 0; i < iStep; i++)

    {

    if (memcmp(a[i],a[iStep],sizeof(a[i])) == 0)

    {

    return;

    }

    }

    if (a[iStep][1] != a[iStep][3] && (a[iStep][2] == a[iStep][1] || a[iStep][0] == a[iStep][1]))

    {

    return;

    }

    for (i = -1; i <= 2; i++)

    {

    b[iStep] = i;

    memcpy(a[iStep + 1],a[iStep],sizeof(a[iStep + 1]));

    a[iStep + 1][3] = 1 - a[iStep + 1][3];

    if (i == -1)

    {

    search(iStep + 1);

    }

    else if (a[iStep][i] == a[iStep][3])

    {

    a[iStep + 1][i] = a[iStep + 1][3];

    search(iStep + 1);

    }

    }

    }

    int main()

    {

    search(0);

    return 0;

    }

    结果:

    带羊到对岸

    空手回本岸

    带狼到对岸

    带羊回本岸

    带菜到对岸

    空手回本岸

    带羊到对岸

    带羊到对岸

    空手回本岸

    带菜到对岸

    带羊回本岸

    带狼到对岸

    空手回本岸

    带羊到对岸

    Press any key to continue

    加我的qq号 476758573

    我帮你详细解释再给你流程图啊

    虽然时间过了 但希望有用啊

    另外,站长团上有产品团购,便宜有保证