HDU 1010 Tempter of the Bone 解题报告

Tempter of the Bone

问题模型

      迷宫问题。由起始位置出发t秒时能否到达出口。每秒可以从当前位置沿上、下、左、右四个方向移动一步。

解题报告

      dfs+剪枝

/*基础搜索题,dfs dfs的思想是比较直观的,如果不加以剪枝这题的所有状态为4^(n*m),很小的规模(本题中01或1->0 必然是奇数步 0->0或1->1 必然是偶数步 结论: 当遇到从 0 走向 0 但是要求时间是奇数的, 或者, 从 1 走向 0 但是要求时间是偶数的 都可以直接判断不可达! 5、如果从当前的位置到目标位置所需的理论上的最少时间大于了当前剩余的时间,直接判断为不可到达 */ /* 变量说明: sx,sy为初始位置,tx,ty为目标位置,out为1表示走出迷宫 */ #include using namespace std; char maze[7][7]; int dx[4]={0,0,-1,1},dy[4]={1,-1,0,0},sx,sy,tx,ty,r,c,t; bool out; bool judge(int x,int y){ return (x>=0 && x=0 && yt||out) return ; //剪枝 1、3 if(t-deep>r>>c>>t,r||c||t){ int cnt=0; for(int i=0;i>maze[i][j]; if(maze[i][j]!='X') cnt++; if(maze[i][j]=='S'){sx=i;sy=j;} if(maze[i][j]=='D'){tx=i;ty=j;} } maze[sx][sy]='X'; if(cnt

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