日韩性视频-久久久蜜桃-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_青蛙换位的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 97免费在线观看视频 | 国模av在线| 亚洲一区免费电影 | 朴银狐电影中文在线看 | 成人欧美一级特黄 | 男女扒开双腿猛进入爽爽免费 | 热久久网站 | 日韩午夜激情电影 | 欧美少妇视频 | 亚洲天堂资源网 | 超级乱淫视频 | 用力抵着尿进去了h | 无码人妻一区二区三区免费 | 91九色蝌蚪porny | 亚洲欧美另类视频 | 黄色污污网站 | 金鱼妻日剧免费观看完整版全集 | 色撸撸在线 | 欧美做爰全过程免费看 | av高清在线观看 | www.亚洲激情 | 青草av在线 | 久久一区二区三区精品 | 91国产高清 | 蜜桃成人网 | 乱色视频 | 国产欧美一区二区三区在线老狼 | 992tv成人免费视频 | 黄色精品视频 | 老外一级黄色片 | 亚洲av综合色区无码另类小说 | 日本在线三级 | 精品成人中文无码专区 | 国产在线三区 | 免费激情 | 精品久久久久久一区二区里番 | 另类中文字幕 | 国产原创精品 | 麻豆视频播放 | 性生交大片免费看女人按摩 | 天天干天天操天天 | 欧美大片在线播放 | 欧美另类一区二区 | 手机av网址 | 中文字幕人妻互换av久久 | av在线天堂网 | ass亚洲熟妇毛耸耸pics | 性色av蜜臀av浪潮av老女人 | 视频在线日韩 | 91麻豆精品国产午夜天堂 | 国产午夜视频 | 亚洲成人自拍 | 在线观看国产成人 | 欧美中文字幕第一页 | 少妇熟女高潮流白浆 | av官网在线观看 | 人妻丰满熟妇岳av无码区hd | 亚洲欧洲精品在线 | 超碰97人人草 | 91精品免费在线观看 | 一级片中文字幕 | 日韩 国产 一区 | 日本老年老熟无码 | 亚洲一区a | 精品久久久久久久久久久国产字幕 | 亚洲性免费 | 亚洲成人第一页 | 黑帮大佬和我的三百六十五天 | 在线看国产精品 | 女性喷水视频 | 糖心logo在线观看 | 五月天丁香激情 | 麻豆蜜桃视频 | 摸大乳喷奶水www视频 | 91片黄在线观看 | 天天撸天天射 | 久久人人人 | 日韩一级视频在线观看 | 亚洲天堂一区二区 | 成人自拍网 | 中国黄色a级 | 日韩精品无码一区二区三区久久久 | 99亚洲精品 | 国产精品麻豆一区二区 | 一级淫片免费看 | 色妞干网 | 青青草国内自拍 | 91porn在线 | 91av在线网站| 日日夜夜精 | 三女同志亚洲人狂欢 | 久久精品国产亚洲av高清色欲 | 韩国av免费观看 | 性色av蜜臀av色欲av | 肉性天堂 | 欧亚毛片 | 99色在线视频| 免费啪啪小视频 | 成人亚洲天堂 |