走方格編程
⑴ C語言題(方格取數)
可以用遞歸的方式計算。
遞歸啊。。。遞歸函數大概就是:
int dfs(int x, int y) {
if (x > 4 || x < 1 || y > 5 || y < 1) return 0;
if (x == 1 && y == 1) return 1;
return dfs(x - 1, y) + dfs(x, y - 1);
}
主函數裡面輸出dfs(4, 5)的值就可以了。
⑶ 求用C語言編程實現一個國際象棋 馬怎麼走的問題
C語言我不會,下面這個是易語言的,希望你能借鑒一下:
熟悉國際象棋的人都知道,馬在某個方格,可以在一步內到達的不同位置最多有8個。如圖所示:
#4#3#
5#0#2
6###1
#7#8#
(1)對馬走的方法可以設定一個順序,如當前位置在棋盤的(i,j)方格,下一個可能的位置依次為(i+2,j+1),(i+1,j+2),(i-1,j+2),(i-2,j+1),(i-2,j-1),(i-1,j-2),(i+1,j-2),(i+2,j-1),實際可以走的位置很明顯僅僅限於還未走過的和不越出邊界的那些位置。
(2)這里我們定義馬在一步內實際可以走的位置數為馬在當前位置的出口數,此外,為便於程序的統一處理,這里引入兩個數組「行變化數組」和 「列變化數組」,分別儲存8種可能走法對馬當前所在位置的橫縱坐標的增量。
(3)本題用貪心法策略求解。 當馬處於某一位置時,其選擇下一位置的准則為:從馬當前位置所允許走的位置中,選擇出口數最少的哪個位置。如馬的當前位置只有3個出口,它們的出口數分別為4,2,3,則程序就選擇出口數為2的那個出口。 演算法簡單描述,馬從棋盤第一行第一列位置開始出發;預設著法選擇順序控制變數「方法編號」為1;
{
循環判斷首()
模擬棋盤數組初始化為0;
行號=起始行號;列號=起始列號;
計次循環首(63,當前遍歷步數)
如果(馬當前位置沒有出口)
返回(-1)
否則 行號按返回方法改變;列號按返回方法改變。
在棋盤相對位置記錄為第幾步驟;
如果(找到解)
輸出模擬棋盤數組;
終止循環;
否則 方法編號=方法編號+1;
循環判斷尾(沒有找到解)
}
上述演算法在整個找解的過程一直向前,所以能非常快地找到解。但是對於某些開始位置,實際上有解可程序第一次找不到解,則程序只要變換8中可能出口的順序,就能找到解。考慮到這種變換8種方法的情況,程序引用「方法編號「用於控制8種可能走法的順序。開始為1時不能找到解,就讓"方法編號"加1,重新找解。