編程走格子
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,重新找解。
⑵ C語言編程題
c語言 這個代碼可以完成
⑶ 急求,一個JAVA編程,關於怎麼弄格子的
drawRect
public void drawRect(int x,
int y,
int width,
int height)繪制指定矩形的邊框。矩形的左邊和右邊位於 x 和 x + width。頂邊和底邊位於 y 和 y + height。使用圖形上下文的當前顏色繪制該矩形。
參數:
x - 要繪制矩形的 x 坐標。
y - 要繪制矩形的 y 坐標。
width - 要繪制矩形的寬度。
height - 要繪制矩形的高度。
⑷ 如何用c語言編程實現動態規劃
動態規劃主要是 狀態 & 狀態轉移方程 如果轉移方程寫出來了 程序就自然出來啦
對於這題 dp[i][j] 表示 走到格子 (i,j) 時 的總和最大值 val[i][j] 表示格子 (i, j) 的值
那麼有 dp[i][j] = max( dp[i-1][j] , dp[i][j-1]) + val[i][j];
當然 邊界的時候要特殊考慮一下
for(int i = 1; i <= m ; i++)
for(int j = 1; j <= n; j++)
{
if( i == 1 ) ....;
else if( j == 1 ) ....;
else dp[i][j] = max( dp[i-1][j] , dp[i][j-1]) + val[i][j];
}
最後 dp[m][n] 就是答案啦 ^ ^
⑸ 編程題跳格子(遞歸演算法,一定!!),謝謝
遞歸啊。。。遞歸函數大概就是:
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)的值就可以了。