hdu1010(深搜 剪枝 回溯)

这个题目我做的时候不是超时就是错误,自己是新手也一直不知道再怎么剪下去 就参考了网上一大牛blog
代码如下

#include
#include
#include 
//hdu1010 深搜优化剪枝 
int m,n,t;
char map[8][8];
int d[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
int ex,ey,sx,sy,ok;
void dfs(int x,int y,int count)
{
   int i;
   if(count==t)
   {
   	if(ex==x&&ey==y) ok=1;
   	return;
   }
   if(ok) return;//只要找到一条路径 那么就行了
   int temp=abs(x-ex)+abs(y-ey)-abs(count-t);//剪枝的地方 判断为奇数或者偶数
   if(temp>0||temp&1) return;//如过是奇数 或者当要走的路大于应该走的步数的时候,return;
   for(int i=0;i<4;i++)
   {
   	int fx=x+dir[i][0];
   	int fy=y+dir[i][1];
   	if(fx>=0&&fx=0&&fy

你可能感兴趣的:(搜索)