最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

2023-09-27:用go語言,在一個 n x n 的國際象棋棋盤上,一個騎士從單元格 (row, col

2023-09-27 15:45 作者:福大大架構(gòu)師每日一題  | 我要投稿

2023-09-27:用go語言,在一個 n x n 的國際象棋棋盤上,一個騎士從單元格 (row, column) 開始,

并嘗試進行 k 次移動。行和列是 從 0 開始 的,所以左上單元格是 (0,0),

右下單元格是 (n - 1, n - 1),象棋騎士有8種可能的走法,

每次移動在基本方向上是兩個單元格,然后在正交方向上是一個單元格,類似馬走日,

每次騎士要移動時,它都會隨機從8種可能的移動中選擇一種(即使棋子會離開棋盤),然后移動到那里。

騎士繼續(xù)移動,直到它走了 k 步或離開了棋盤。

返回 騎士在棋盤停止移動后仍留在棋盤上的概率。

輸入: n = 3, k = 2, row = 0, column = 0。

輸出: 0.0625。

來自左程云。

答案2023-09-27:

這段代碼實現(xiàn)了一個求解國際象棋棋盤上騎士留在棋盤上的概率的函數(shù)。函數(shù)knightProbability接收四個參數(shù):n表示棋盤大小,k表示騎士的移動次數(shù),rowcolumn表示騎士的初始位置。

主要的函數(shù)是process2,它使用動態(tài)規(guī)劃的思想來求解。首先,根據(jù)當(dāng)前位置和剩余移動次數(shù),計算出騎士在當(dāng)前位置的概率。如果當(dāng)前位置已經(jīng)計算過,則直接返回之前的結(jié)果。否則,根據(jù)題目要求,將當(dāng)前位置向8個可能的方向移動,并將每個方向的概率除以8,然后遞歸計算騎士在下一步位置的概率,并將所有可能的結(jié)果相加得到當(dāng)前位置的概率。最后,將計算的結(jié)果記錄在dp數(shù)組中,以便之后的計算可以直接使用。

在主函數(shù)中,給定了初始參數(shù)n=3,k=2,row=0,column=0,然后調(diào)用knightProbability函數(shù)計算騎士停止移動后留在棋盤上的概率,并將結(jié)果打印出來。

總的時間復(fù)雜度:由于每個位置最多計算一次,而每個位置的計算需要遍歷所有剩余移動次數(shù),所以總的時間復(fù)雜度為O(n^2 * k)。

總的額外空間復(fù)雜度:dp數(shù)組的大小為nnk,所以總的額外空間復(fù)雜度為O(n^2 * k)。

go完整代碼如下:

package?main

import?"fmt"

func?knightProbability(n?int,?k?int,?row?int,?column?int)?float64?{
????dp?:=?make([][][]float64,?n)
????for?i?:=?0;?i?<?n;?i++?{
????????dp[i]?=?make([][]float64,?n)
????????for?j?:=?0;?j?<?n;?j++?{
????????????dp[i][j]?=?make([]float64,?k+1)
????????????for?t?:=?0;?t?<=?k;?t++?{
????????????????dp[i][j][t]?=?-1
????????????}
????????}
????}
????return?process2(n,?k,?row,?column,?dp)
}

func?process2(n,?rest,?r,?c?int,?dp?[][][]float64)?float64?{
????if?r?<?0?||?r?>=?n?||?c?<?0?||?c?>=?n?{
????????return?0
????}
????if?dp[r][c][rest]?!=?-1?{
????????return?dp[r][c][rest]
????}
????var?ans?float64
????if?rest?==?0?{
????????ans?=?1
????}?else?{
????????ans?+=?(process2(n,?rest-1,?r-2,?c+1,?dp)?/?8)
????????ans?+=?(process2(n,?rest-1,?r-1,?c+2,?dp)?/?8)
????????ans?+=?(process2(n,?rest-1,?r+1,?c+2,?dp)?/?8)
????????ans?+=?(process2(n,?rest-1,?r+2,?c+1,?dp)?/?8)
????????ans?+=?(process2(n,?rest-1,?r+2,?c-1,?dp)?/?8)
????????ans?+=?(process2(n,?rest-1,?r+1,?c-2,?dp)?/?8)
????????ans?+=?(process2(n,?rest-1,?r-1,?c-2,?dp)?/?8)
????????ans?+=?(process2(n,?rest-1,?r-2,?c-1,?dp)?/?8)
????}
????dp[r][c][rest]?=?ans
????return?ans
}

func?main()?{
????n,?k,?row,?column?:=?3,?2,?0,?0
????result?:=?knightProbability(n,?k,?row,?column)
????fmt.Println(result)
}

在這里插入圖片描述

rust完整代碼如下:

fn?knight_probability(n:?i32,?k:?i32,?row:?i32,?column:?i32)?->?f64?{
????let?mut?dp?=?vec![vec![vec![-1.0;?(k+1)?as?usize];?n?as?usize];?n?as?usize];

????return?process2(n,?k,?row,?column,?&mut?dp);
}

fn?process2(n:?i32,?rest:?i32,?r:?i32,?c:?i32,?dp:?&mut?Vec<Vec<Vec<f64>>>)?->?f64?{
????if?r?<?0?||?r?>=?n?||?c?<?0?||?c?>=?n?{
????????return?0.0;
????}
????if?dp[r?as?usize][c?as?usize][rest?as?usize]?!=?-1.0?{
????????return?dp[r?as?usize][c?as?usize][rest?as?usize];
????}

????let?mut?ans?=?0.0;
????if?rest?==?0?{
????????ans?=?1.0;
????}?else?{
????????ans?+=?(process2(n,?rest?-?1,?r?-?2,?c?+?1,?dp)?/?8.0);
????????ans?+=?(process2(n,?rest?-?1,?r?-?1,?c?+?2,?dp)?/?8.0);
????????ans?+=?(process2(n,?rest?-?1,?r?+?1,?c?+?2,?dp)?/?8.0);
????????ans?+=?(process2(n,?rest?-?1,?r?+?2,?c?+?1,?dp)?/?8.0);
????????ans?+=?(process2(n,?rest?-?1,?r?+?2,?c?-?1,?dp)?/?8.0);
????????ans?+=?(process2(n,?rest?-?1,?r?+?1,?c?-?2,?dp)?/?8.0);
????????ans?+=?(process2(n,?rest?-?1,?r?-?1,?c?-?2,?dp)?/?8.0);
????????ans?+=?(process2(n,?rest?-?1,?r?-?2,?c?-?1,?dp)?/?8.0);
????}
????dp[r?as?usize][c?as?usize][rest?as?usize]?=?ans;
????return?ans;
}

fn?main()?{
????let?n?=?3;
????let?k?=?2;
????let?row?=?0;
????let?column?=?0;
????println!("{}",?knight_probability(n,?k,?row,?column));
}

在這里插入圖片描述

c++完整代碼如下:

#include?<iostream>
#include?<vector>
using?namespace?std;

double?process2(int?n,?int?rest,?int?r,?int?c,?vector<vector<vector<double>>>&?dp)?{
????if?(r?<?0?||?r?>=?n?||?c?<?0?||?c?>=?n)?{
????????return?0;
????}
????if?(dp[r][c][rest]?!=?-1)?{
????????return?dp[r][c][rest];
????}
????double?ans?=?0;
????if?(rest?==?0)?{
????????ans?=?1;
????}
????else?{
????????ans?+=?(process2(n,?rest?-?1,?r?-?2,?c?+?1,?dp)?/?8);
????????ans?+=?(process2(n,?rest?-?1,?r?-?1,?c?+?2,?dp)?/?8);
????????ans?+=?(process2(n,?rest?-?1,?r?+?1,?c?+?2,?dp)?/?8);
????????ans?+=?(process2(n,?rest?-?1,?r?+?2,?c?+?1,?dp)?/?8);
????????ans?+=?(process2(n,?rest?-?1,?r?+?2,?c?-?1,?dp)?/?8);
????????ans?+=?(process2(n,?rest?-?1,?r?+?1,?c?-?2,?dp)?/?8);
????????ans?+=?(process2(n,?rest?-?1,?r?-?1,?c?-?2,?dp)?/?8);
????????ans?+=?(process2(n,?rest?-?1,?r?-?2,?c?-?1,?dp)?/?8);
????}
????dp[r][c][rest]?=?ans;
????return?ans;
}

double?knightProbability(int?n,?int?k,?int?row,?int?column)?{
????vector<vector<vector<double>>>?dp(n,?vector<vector<double>>(n,?vector<double>(k?+?1,?-1.0)));
????return?process2(n,?k,?row,?column,?dp);
}

int?main()?{
????int?n?=?3,?k?=?2,?row?=?0,?column?=?0;
????double?result?=?knightProbability(n,?k,?row,?column);
????cout?<<?"Result:?"?<<?result?<<?endl;
????return?0;
}

在這里插入圖片描述

c完整代碼如下:

#include?<stdio.h>
#include?<stdlib.h>

double?process2(int?n,?int?rest,?int?r,?int?c,?double***?dp)?{
????if?(r?<?0?||?r?>=?n?||?c?<?0?||?c?>=?n)?{
????????return?0;
????}
????if?(dp[r][c][rest]?!=?-1)?{
????????return?dp[r][c][rest];
????}
????double?ans?=?0;
????if?(rest?==?0)?{
????????ans?=?1;
????}
????else?{
????????ans?+=?(process2(n,?rest?-?1,?r?-?2,?c?+?1,?dp)?/?8);
????????ans?+=?(process2(n,?rest?-?1,?r?-?1,?c?+?2,?dp)?/?8);
????????ans?+=?(process2(n,?rest?-?1,?r?+?1,?c?+?2,?dp)?/?8);
????????ans?+=?(process2(n,?rest?-?1,?r?+?2,?c?+?1,?dp)?/?8);
????????ans?+=?(process2(n,?rest?-?1,?r?+?2,?c?-?1,?dp)?/?8);
????????ans?+=?(process2(n,?rest?-?1,?r?+?1,?c?-?2,?dp)?/?8);
????????ans?+=?(process2(n,?rest?-?1,?r?-?1,?c?-?2,?dp)?/?8);
????????ans?+=?(process2(n,?rest?-?1,?r?-?2,?c?-?1,?dp)?/?8);
????}
????dp[r][c][rest]?=?ans;
????return?ans;
}

double?knightProbability(int?n,?int?k,?int?row,?int?column)?{
????double***?dp?=?(double***)malloc(n?*?sizeof(double**));
????for?(int?i?=?0;?i?<?n;?i++)?{
????????dp[i]?=?(double**)malloc(n?*?sizeof(double*));
????????for?(int?j?=?0;?j?<?n;?j++)?{
????????????dp[i][j]?=?(double*)malloc((k?+?1)?*?sizeof(double));
????????????for?(int?t?=?0;?t?<=?k;?t++)?{
????????????????dp[i][j][t]?=?-1;
????????????}
????????}
????}
????double?result?=?process2(n,?k,?row,?column,?dp);
????for?(int?i?=?0;?i?<?n;?i++)?{
????????for?(int?j?=?0;?j?<?n;?j++)?{
????????????free(dp[i][j]);
????????}
????????free(dp[i]);
????}
????free(dp);
????return?result;
}

int?main()?{
????int?n?=?3,?k?=?2,?row?=?0,?column?=?0;
????double?result?=?knightProbability(n,?k,?row,?column);
????printf("Probability:?%f\n",?result);
????return?0;
}

在這里插入圖片描述


2023-09-27:用go語言,在一個 n x n 的國際象棋棋盤上,一個騎士從單元格 (row, col的評論 (共 條)

分享到微博請遵守國家法律
青铜峡市| 临泽县| 招远市| 嫩江县| 凤庆县| 凤凰县| 灌南县| 银川市| 蓬莱市| 武功县| 宝清县| 虹口区| 大名县| 峡江县| 临泽县| 菏泽市| 无棣县| 武冈市| 阿坝县| 什邡市| 株洲县| 民和| 伊通| 新乡市| 六安市| 泸西县| 光山县| 益阳市| 黑河市| 昌邑市| 峡江县| 上思县| 项城市| 大姚县| 玉林市| 澜沧| 潢川县| 开封县| 元阳县| 广宁县| 女性|