c语言编程青蛙过河问题,趣味算法-青蛙过河

趣味编程-青蛙过河:

两队青蛙,河左边3只,右边3只,青蛙过河要踩着石头,每次移动青蛙最多可以跳过对面的一只青蛙,但必须落在空的石头上。

算法原则:

每次只移动一只青蛙。

1)  检查整个路径左侧青蛙越过右侧青蛙跳到空白石头上的情况;

2)  检查整个路径右左侧青蛙越过左侧青蛙跳到空白石头上的情况;

3)  检查整个路径左侧青蛙可以直接向右移动到空白石头上的情况,并且保证移动后向左的青蛙会与向右的青蛙相邻;

4)  检查整个路径右侧青蛙直接向左移动到空白石头上的情况,并且保证移动后向右的青蛙会与向左的青蛙相邻;

到达对岸时结果 +1;

#include void print_road(int arrRoad[], int nLen)

{

int i = 0;

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

{

if (arrRoad[i] < 0)

printf("-> ");

else if (arrRoad[i] > 0)

printf(" 0))

{

swap(&arrRoad[nEmptyGrid-2], &arrRoad[nEmptyGrid]);

if (nEmptyGrid == nLen - 1)

nSuccessCount++;

nEmptyGrid -= 2;

print_road(arrRoad, nLen);

bMove = 0;

break;

}

}

for (i = nLen-1; i > nEmptyGrid && bMove; i--)

{

if ((arrRoad[nEmptyGrid+2] > 0) && (arrRoad[nEmptyGrid+1] < 0))

{

swap(&arrRoad[nEmptyGrid+2], &arrRoad[nEmptyGrid]);

if (nEmptyGrid == 0)

nSuccessCount++;

print_road(arrRoad, nLen);

nEmptyGrid += 2;

bMove = 0;

break;

}

}

for (i = 0; i < nEmptyGrid && bMove; i++)

{

if ((arrRoad[nEmptyGrid - 1] < 0)

&& (nEmptyGrid < nLen - 2

&& (arrRoad[nEmptyGrid - 2]) != arrRoad[nEmptyGrid+1]))

{

swap(&arrRoad[nEmptyGrid-1], &arrRoad[nEmptyGrid]);

if (nEmptyGrid == nLen - 1)

nSuccessCount++;

print_road(arrRoad, nLen);

nEmptyGrid -= 1;

bMove = 0;

break;

}

}

for (i = nLen-1; i > nEmptyGrid && bMove; i--)

{

if ((arrRoad[nEmptyGrid+1] > 0)

&& (nEmptyGrid > 0

&& arrRoad[nEmptyGrid+2] != arrRoad[nEmptyGrid-1]))

{

swap(&arrRoad[nEmptyGrid+1], &arrRoad[nEmptyGrid]);

if (nEmptyGrid == 0)

nSuccessCount++;

print_road(arrRoad, nLen);

nEmptyGrid += 1;

bMove = 0;

break;

}

}

}

}

int main()

{

int arrTest[7] = {-1,-1,-1,0,1,1,1};

int n = 0;

print_road(arrTest, 7);

move_frog(arrTest, 7, 3);

scanf("%d", &n);

return 0;

}

算法复杂度:

青蛙个数: N

O(N) = N * (N/2)

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值