zoj2749求思路
想了4个多小时 各种超时啊, 求思路啊,求思路, 有AC的代码最好了, 可以用来研究,第一个贴AC代码的100分归他, 附上思路另加分啊
http://acm.zju.
我的思路是这样的 用DFS来搜
void DFS(int x, int y, int str[], int step, int val[10][5],int tmpp)
x,y 表示点坐标
step用来存步数
str用来存路径 (既存当前点的上一个点,像链表形式方式那样来存)
val[][0] val[][1] val[][2] 用来存每行0,1,2的个数
val[][4]用来存当前行已经访问过的那类数(这是用来剪支用的 如果当前行访问过了1就不能访问2的点了 反之也一样)
tmpp 是用来压缩存每行时候都已经是0和1 或0和2了 是就在相应的行号位上标记为1
然后加了两个普通的剪支方法:
if(step + abs(x2-x) +abs(y2-y) >= tmpnum) return;
if(step >= tmpnum) return; 其中tmpnum是存上次收到结果时的最小步数,x2,y2是目标坐标
然后就各种超时啊 是不是我思路原本就错了 还是没有想到犀利的剪支方法啊, 求解啊