最小步数

来源:互联网 发布:淘宝介入买家举证时间 编辑:程序博客网 时间:2024/05/10 05:41

四个递归,向上左下右四个方向走,类似二叉树的遍历两个递归,分别遍历了左右子树,最初把最小值置为一个较大值1000,而且在每次for循环开始都要初始化。

还可以用另一种方法,二维数组标记,a[4][2],如表示向上的两个走或没走过的状态,然后利用for循环就行啦!


#include<stdio.h>



int row2, col2, row1, col1, count, min;
int a[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};


void step( int row, int col )
{
if((row == row2)&&(col == col2))
{
if(count < min)
min=count;
return ;
}
if( a[row][col] == 0 )
{
count++;
a[row][col] = 1;
step( row-1, col );
         step( row, col-1 );
            step( row+1, col );
            step( row, col+1 );
a[row][col] = 0;
count--;
}
}


int main(void)
{
int n, i;
scanf("%d", &n);
for( i = 0; i < n; i++)
{
min = 10000;
scanf("%d%d%d%d", &row1,&col1,&row2,&col2);
step( row1, col1 );
   printf("%d\n",min);
}
return 0;
}