日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

青蛙换位java_青蛙换位

發(fā)布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 青蛙换位java_青蛙换位 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

問題描述:

在7塊石頭上,有綠、紅青蛙各3只,?綠青蛙在左邊面向右,紅青蛙在右邊面向左,中間是個空位。每次移動一只青蛙,青蛙只能往前跳一步,或隔著一只青蛙跳一步,將左邊的綠青蛙移動到右邊,將右邊的紅青蛙移動到左邊。

解法一迭代回溯法:

#include

#include

typedef int BOOL;

#define TRUE1

#define FALSE0

void iterative_backtrack();// 迭代回溯法求解問題

void recursive_backtrack(int n);// 遞歸回溯法求問題解

BOOL can_shift(int i);// 判斷在第i個石頭上青蛙是否能移位

void frog_shift(int i);// 在第i個石頭上青蛙是否能移位

int where_empty();// 計算空位的位置

BOOL is_success();// 判斷是否已經完成所有移位

void print_result();// 打印結果

#define EMPTY0// 表示空位

#define GREEN1// 表示綠青蛙

#define RED2// 表示紅青蛙

#define NUM7// 表示石頭數(shù)

#define MAXSTEP24// 完成移位可能需要的步數(shù)

/* stone[i]表示第i塊石頭上的物體 */

static int stone[NUM] = {GREEN, GREEN, GREEN, EMPTY, RED, RED, RED};

/* step[i]表示第i步驟時,哪塊石頭上的青蛙進行了移位 */

static int step[MAXSTEP];

int main() {

int i;

/* 遇到step[i]的值為-1時,表示該步驟未被執(zhí)行 */

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

step[i] = -1;

iterative_backtrack();

return EXIT_SUCCESS;

}

/*

** 迭代回溯法求解

*/

void iterative_backtrack() {

int n = 0;// 迭代的深度,即執(zhí)行的步驟數(shù)

int i = 0;// 當前將進行移位的青蛙的位置

int frog_pos[MAXSTEP];// 保存每一步驟將進行移位的青蛙的位置

int empty_pos[MAXSTEP];// 保存沒一步驟空位的位置

while(TRUE) {

/* 尋找第一只能夠移位的青蛙 */

while (i < NUM && !can_shift(i))

i++;

/* 如果存在能夠移位的青蛙 */

if (i < NUM) {

/* 保存當前將進行移位的青蛙的位置 */

frog_pos[n] = i;

/* 保存當前空位的位置 */

empty_pos[n] = where_empty();

/* 記錄第n步驟時,第i塊石頭上的青蛙進行移位 */

step[n] = i;

/* 第i塊石頭上的青蛙進行移 */

frog_shift(i);

/* 如果已經完成所有青蛙的正確移位 */

if (is_success()) {

print_result();// 打印結果

n++;// 進行下一步驟

}

/* 如果還未完成所有青蛙的正確移位 */

else {

n++;// 進行下一步驟

i = 0;// 從第0塊石頭上的青蛙開始迭代

}

}

/* 如果每一塊石頭上的青蛙都不能進行移位 */

else {

/* 回溯至上一步驟,如果是回溯至第-1步驟時,結束迭代 */

if (--n < 0)

break;

frog_shift(empty_pos[n]);// 將上一步驟進行移位的青蛙移回原處

i = frog_pos[n] + 1;// 從下一塊石頭的青蛙開始迭代

}

}

}

/*

** 判斷在第i個石頭上青蛙是否能移位

*/

BOOL can_shift(int i) {

int empty_pos = where_empty();

switch(stone[i]) {

/*

** 綠青蛙從左往右跳,如果前面兩塊石頭中有個空位,那么該青蛙能夠移位

** 紅青蛙從右往左跳,如果前面兩塊石頭中有個空位,那么該青蛙能夠移位

*/

case GREEN:

if (empty_pos > i && empty_pos <= i + 2)

return TRUE;

break;

case RED:

if (empty_pos < i && empty_pos >= i - 2)

return TRUE;

break;

case EMPTY:

default:

return FALSE;

break;

}

return FALSE;

}

/*

** 在第i塊石頭上的青蛙進行移位

*/

void frog_shift(int i) {

int empty_pos = where_empty();

stone[empty_pos] = stone[i];

stone[i] = EMPTY;

}

/*

** 計算空位的位置

*/

int where_empty() {

int i;

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

if (stone[i] == EMPTY) break;

return i;

}

/*

** 判斷是否已經完成所有移位

*/

BOOL is_success() {

if (stone[0] == RED &&

stone[1] == RED &&

stone[2] == RED &&

stone[3] == EMPTY &&

stone[4] == GREEN &&

stone[5] == GREEN &&

stone[6] == GREEN)

return TRUE;

return FALSE;

}

/*

** 打印結果

*/

void print_result() {

int i;

for (i = 0; i < MAXSTEP; i++) {

if (step[i] == -1)

break;

printf("%d ", step[i]);

}

putchar('\n');

}

解法二遞歸回溯法:

#include

#include

typedef int BOOL;

#define TRUE1

#define FALSE0

void iterative_backtrack();// 迭代回溯法求解問題

void recursive_backtrack(int n);// 遞歸回溯法求問題解

BOOL can_shift(int i);// 判斷在第i個石頭上青蛙是否能移位

void frog_shift(int i);// 在第i個石頭上青蛙是否能移位

int where_empty();// 計算空位的位置

BOOL is_success();// 判斷是否已經完成所有移位

void print_result();// 打印結果

#define EMPTY0// 表示空位

#define GREEN1// 表示綠青蛙

#define RED2// 表示紅青蛙

#define NUM7// 表示石頭數(shù)

#define MAXSTEP24// 完成移位可能需要的步數(shù)

/* stone[i]表示第i塊石頭上的物體 */

static int stone[NUM] = {GREEN, GREEN, GREEN, EMPTY, RED, RED, RED};

/* step[i]表示第i步驟時,哪塊石頭上的青蛙進行了移位 */

static int step[MAXSTEP];

int main() {

int i;

/* 遇到step[i]的值為-1時,表示該步驟未被執(zhí)行 */

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

step[i] = -1;

recursive_backtrack(0);

return EXIT_SUCCESS;

}

/*

** 遞歸回溯法求解

** n表示遞歸的深度數(shù),即執(zhí)行的步驟

*/

void recursive_backtrack(int n) {

int i;

int original_empty_pos;

if (is_success()) {

print_result();

} else {

/* 從第0塊石頭上的青蛙逐一嘗試 */

for (i = 0; i < NUM; i++) {

/* 如果第i塊石頭上的青蛙能夠進行移位 */

if (can_shift(i)) {

/* 記錄青蛙移位前,空位的位置 */

original_empty_pos = where_empty();

/* 記錄第n步驟時,第i塊石頭上的青蛙進行移位 */

step[n] = i;

/* 第i塊石頭上的青蛙進行移位 */

frog_shift(i);

/* 執(zhí)行下一步驟,第n+1步驟 */

recursive_backtrack(n+1);

/* 回溯,將青蛙移回原來的位置 */

frog_shift(original_empty_pos);

}

}

}

}

/*

** 判斷在第i個石頭上青蛙是否能移位

*/

BOOL can_shift(int i) {

int empty_pos = where_empty();

switch(stone[i]) {

/*

** 綠青蛙從左往右跳,如果前面兩塊石頭中有個空位,那么該青蛙能夠移位

** 紅青蛙從右往左跳,如果前面兩塊石頭中有個空位,那么該青蛙能夠移位

*/

case GREEN:

if (empty_pos > i && empty_pos <= i + 2)

return TRUE;

break;

case RED:

if (empty_pos < i && empty_pos >= i - 2)

return TRUE;

break;

case EMPTY:

default:

return FALSE;

break;

}

return FALSE;

}

/*

** 在第i塊石頭上的青蛙進行移位

*/

void frog_shift(int i) {

int empty_pos = where_empty();

stone[empty_pos] = stone[i];

stone[i] = EMPTY;

}

/*

** 計算空位的位置

*/

int where_empty() {

int i;

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

if (stone[i] == EMPTY) break;

return i;

}

/*

** 判斷是否已經完成所有移位

*/

BOOL is_success() {

if (stone[0] == RED &&

stone[1] == RED &&

stone[2] == RED &&

stone[3] == EMPTY &&

stone[4] == GREEN &&

stone[5] == GREEN &&

stone[6] == GREEN)

return TRUE;

return FALSE;

}

/*

** 打印結果

*/

void print_result() {

int i;

for (i = 0; i < MAXSTEP; i++) {

if (step[i] == -1)

break;

printf("%d ", step[i]);

}

putchar('\n');

}

結果輸出:

2 4 5 3 1 0 2 4 6 5 3 1 2 4 3

4 2 1 3 5 6 4 2 0 1 3 5 4 2 3

總結

以上是生活随笔為你收集整理的青蛙换位java_青蛙换位的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产香蕉视频 | 国产一级爱c视频 | 亚洲精品色午夜无码专区日韩 | 精品国产av一区二区 | 欧美激情 国产精品 | 国产天堂资源 | 免费在线黄色片 | 亚洲精品乱码久久久久久蜜桃麻豆 | 国产乱人伦精品一区二区 | 特级丰满少妇一级aaa爱毛片 | 欧美人体做爰大胆视频 | 啄木乌欧美一区二区三区 | 亚洲三级免费观看 | 亚洲精品中文字幕乱码三区91 | 97公开免费视频 | 欧美国产二区 | 91成人精品一区在线播放 | 啪啪国产精品 | 在线免费看av | 色视频免费在线观看 | 日批动态图| 免费在线观看黄色网址 | 久久国产精品波多野结衣av | 欧美精品四区 | 久久xxxx | 中文字幕成人在线观看 | 秋霞av鲁丝片一区二区 | av不卡免费在线观看 | 色av资源 | 午夜爽爽爽视频 | 亚洲国产精品国自产拍久久 | 桃色激情网 | 操干视频| 熟女人妻在线视频 | 天天舔天天干 | 亚洲福利电影网 | 青青草婷婷 | 国产suv一区二区 | 麻豆性生活 | 国产午夜精品一区二区理论影院 | 国产视频一区二区三区在线播放 | 亲吻刺激视频 | 在线观看黄色免费网站 | 欧美日韩精品区别 | 天天干天天操av | 97视频免费在线观看 | 欧美激情一区二区三区免费观看 | 国产在线拍揄自揄拍无码视频 | 91操碰| va婷婷 | 99re伊人 | 欧美一页 | av日韩中文字幕 | 久久一级黄色片 | 高清国产一区二区三区四区五区 | 麻豆视频污 | 日韩精品免费一区二区在线观看 | 成人美女免费网站视频 | xxxxx在线视频 | 中文文字幕文字幕高清 | 国产欧美一区二区在线 | 亚洲午夜久久久久久久久红桃 | 亚洲人在线观看视频 | 少妇视频在线播放 | 国产精品毛片va一区二区三区 | 二区三区在线观看 | 久久久999精品视频 国产在线xx | 精品国偷自产一区二区三区 | 日韩女优中文字幕 | 亚洲综合久 | 国产99久久久久久免费看 | 欧美成人综合视频 | 亚洲另类色综合网站 | 日本一区二区精品视频 | 狠狠操狠狠摸 | 日韩极品少妇 | 国产又粗又猛又爽又黄的 | 国产激情精品 | 男人添女人下部高潮全视频 | 韩国日本中文字幕 | 亚洲aⅴ乱码精品成人区 | 欧美日本国产 | 男女啪啪av | 欧美性猛交7777777 | 日韩女优在线播放 | 婷婷av一区二区三区 | 免费成人深夜小野草 | 干爹你真棒插曲mv在线观看 | 久久成人在线 | 天天干夜夜看 | 91久久亚洲 | 特级西西www444人体聚色 | 97超碰97 | 日韩av男人天堂 | 免费成人深夜夜 | 激情五月激情综合 | 一区二区视频在线 | 丰满多毛的大隂户视频 | 最新中文字幕 |