有乙個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...