牛客網考研復試題 棋盤遊戲

2021-09-02 02:14:04 字數 1906 閱讀 9983

有乙個6*6的棋盤,每個棋盤上都有乙個數值,現在又乙個起始位置和終止位置,請找出乙個從起始位置到終止位置代價最小的路徑:     1、只能沿上下左右四個方向移動     2、總代價是沒走一步的代價之和     3、每步(從a,b到c,d)的代價是c,d上的值與其在a,b上的狀態的乘積     4、初始狀態為1     每走一步,狀態按如下公式變化:(走這步的代價%4)+1。

每組資料一開始為6*6的矩陣,矩陣的值為大於等於1小於等於10的值,然後四個整數表示起始座標和終止座標。
輸出最小代價。
1 1 1 1 1 1

1 1 1 1 1 1

1 1 1 1 1 1

1 1 1 1 1 1

1 1 1 1 1 1

1 1 1 1 1 1

0 0 5 5

23
#include using namespace std;

int map[8][8];

bool visited[8][8];

int res = 0x3f3f3f3f;

int dir[4][2] = ,,,

};int s_x, s_y, t_x, t_y;

void dfs(int x, int y, int val, int state)

//剪枝

if (val >= res)

if (visited[x][y]||map[x][y]==0)return;

visited[x][y] = true;

for (int i = 0; i < 4; i++)

}int main()

} cin >> s_x >> s_y >> t_x >> t_y;

s_x++;

s_y++;

t_x++;

t_y++;

dfs(s_x, s_y, 0, 1);

cout << res;

}

#includeusing namespace std;

int mp[1000][1000];

int stx, sty, edx, edy;

int ans = 0x3f3f3f3f;

int dir[5];

bool used[1000][1000];

void dfs(int x, int y,int statue,int ans_tmp) }}

int main()

} cin >> stx >> sty >> edx >> edy;

++stx, ++sty, ++edx, ++edy;

used[stx][sty] = 1;

dfs(stx, sty,1,0);

cout << ans;

}

#includeusing namespace std;

int mp[1000][1000];

int stx, sty, edx, edy;

int ans = 0x3f3f3f3f;

int dir[5];

void dfs(int x, int y,int statue,int ans_tmp) }}

int main()

} cin >> stx >> sty >> edx >> edy;

++stx, ++sty, ++edx, ++edy;

mp[stx][sty] = 0;

dfs(stx, sty,1,0);

cout << ans;

}

牛客網 棋盤遊戲 bfs

有乙個6 6的棋盤,每個棋盤上都有乙個數值,現在又乙個起始位置和終止位置,請找出乙個從起始位置到終止位置代價最小的路徑 1 只能沿上下左右四個方向移動 2 總代價是沒走一步的代價之和 3 每步 從a,b到c,d 的代價是c,d上的值與其在a,b上的狀態的乘積 4 初始狀態為1 每走一步,狀態按如下公...

牛客網 《考研複試機試》 神奇的口袋

有乙個神奇的口袋,總的容積是40,用這個口袋可以變出一些物品,這些物品的總體積必須是40。john現在有n個想要得到的物品,每個物品的體積分別是a1,a2 an。john可以從這些物品中選擇一些,如果選出的物體的總體積是40,那麼利用這個神奇的口袋,john就可以得到這些物品。現在的問題是,john...

牛客網 《考研複試機試》 字尾子串排序

對於乙個字串,將其字尾子串進行排序,例如grain 其子串有 grain rain ain in n 然後對各子串按字典順序排序,即 ain,grain,in,n,rain 每個案例為一行字串。將子串排序輸出 示例1grain aingraininn rain cin.get cin.getline...