dfs求助
查看原帖
dfs求助
557406
rrrachel楼主2021/11/18 21:11

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;

}

求助大佬,这样深搜哪出了问题

2021/11/18 21:11
加载中...