int dfs(int dfsarr[][10],int pos_x1, int pos_y1, int pos_x2, int pos_y2) { //x1只能向右下,x2只能向左上 if (f[pos_x1][pos_y1][pos_x2][pos_y2]) return f[pos_x1][pos_y1][pos_x2][pos_y2]; if (pos_x1 == N && pos_y1 == N && pos_x2 == 1 && pos_y2 == 1) return 0; int go_x1 = 0, go_x2 = 0, go_y1 = 0, go_y2 = 0; int value = 0, temp = 0;
int temp_arr[10][10];
mycopy(dfsarr, temp_arr);
//1下2上
if (pos_y1 < N && pos_y2>1) {
temp = dfs(temp_arr,pos_x1, pos_y1 + 1, pos_x2, pos_y2 - 1);
if (temp + dfsarr[pos_y1 + 1][pos_x1] + dfsarr[pos_y2 - 1][pos_x2] > value)
{
value = temp + dfsarr[pos_y1 + 1][pos_x1] + dfsarr[pos_y2 - 1][pos_x2];
go_x1 = pos_x1;
go_x2 = pos_x2;
go_y1 = pos_y1 + 1;
go_y2 = pos_y2 - 1;
}
}
//1下2左
if (pos_y1 < N && pos_x2>1) {
mycopy(dfsarr, temp_arr);
temp = dfs(temp_arr,pos_x1, pos_y1 + 1, pos_x2 - 1, pos_y2);
if (temp + dfsarr[pos_y1 + 1][pos_x1] + dfsarr[pos_y2][pos_x2 - 1] > value)
{
value = temp + dfsarr[pos_y1 + 1][pos_x1] + dfsarr[pos_y2][pos_x2 - 1];
go_x1 = pos_x1;
go_x2 = pos_x2 - 1;
go_y1 = pos_y1 + 1;
go_y2 = pos_y2;
}
}
//1右2上
if (pos_x1 < N && pos_y2>1) {
mycopy(dfsarr, temp_arr);
temp = dfs(temp_arr, pos_x1 + 1, pos_y1, pos_x2, pos_y2 - 1);
if (temp + dfsarr[pos_y1][pos_x1 + 1] + dfsarr[pos_y2 - 1][pos_x2] > value)
{
value = temp + dfsarr[pos_y1][pos_x1 + 1] + dfsarr[pos_y2 - 1][pos_x2];
go_x1 = pos_x1 + 1;
go_x2 = pos_x2;
go_y1 = pos_y1;
go_y2 = pos_y2 - 1;
}
}
//1右2左
if (pos_x1 < N && pos_x2>1) {
mycopy(dfsarr, temp_arr);
temp = dfs(temp_arr, pos_x1 + 1, pos_y1, pos_x2 - 1, pos_y2);
if (temp + dfsarr[pos_y1][pos_x1 + 1] + dfsarr[pos_y2][pos_x2 - 1] > value)
{
value = temp + dfsarr[pos_y1][pos_x1 + 1] + dfsarr[pos_y2][pos_x2 - 1];
go_x1 = pos_x1 + 1;
go_x2 = pos_x2 - 1;
go_y1 = pos_y1;
go_y2 = pos_y2;
}
}
dfsarr[go_y1][go_x1] = 0;
dfsarr[go_y2][go_x2] = 0;
f[pos_x1][pos_y1][pos_x2][pos_y2] = value;
return value;
}
求助大佬,这样深搜哪出了问题