#include<stdio.h> void dfs(int step,int x,int y); int d[4][2] = {{1,0},{-1,0},{0,1},{0,-1}}; int mg[9][9]={1,1,1,1,1,1,1,1,1, 1,0,0,1,0,0,1,0,1, 1,0,0,1,1,0,0,0,1, 1,0,1,0,1,1,0,1,1, 1,0,0,0,0,1,0,0,1, 1,1,0,1,0,1,0,0,1, 1,1,0,1,0,1,0,0,1, 1,1,0,1,0,0,0,0,1, 1,1,1,1,1,1,1,1,1,}; int sx,sy,ex,ey,min=100000; int main(){ int n; scanf("%d",&n); while(n--){ scanf("%d %d %d %d",&sx,&sy,&ex,&ey); if((sx == ex)&&(sy == ey)){ printf("0 "); continue; } mg[sx][sy]=1; mg[ex][ey]=3; dfs(0,sx,sy); printf("%d ",min); min=100000; mg[ex][ey]=0; mg[sx][sy]=0; } return 0; } void dfs(int step,int x,int y){ int i; for(i = 0 ; i < 4; i++) { int k =x+d[i][0] , v = y+d[i][1] ; if(!mg[k][v]){ mg[k-d[i][0]][v-d[i][1]] = 1; dfs(step+1 , k , v) ; mg[k-d[i][0]][v-d[i][1]] = 0; } if(mg[k][v] == 3) { if(step+1 < min) min = step + 1; } } }
终于,终于,终于,把这题目搞定了,居然只是0步的情况没有考虑到,哎
版权声明:本文为博主原创文章,未经博主允许不得转载。