//这是一个坑,有空再填
#define SIZE 10
int offset[4][2]={-1,0,0,1,1,0,0,-1};
typedef struct {
int x;
int y;
int layer;//本位置接下来进栈的个数
}Stack;
Stack array[SIZE*SIZE];
int visited[SIZE][SIZE];
int data[SIZE][SIZE];
int run_test(int PCB[SIZE][SIZE])
{
int k=0,min=SIZE*SIZE+1;
int i=0,j=0,a=-1,b=-1,c=-1,d=-1;
// WRITE YOUR CODES HEAR
for(i=0;i<SIZE*SIZE;i++)
{
array[i].x=-2;
array[i].y=-2;
array[i].layer=-2;
}
for(i=0;i<SIZE;i++)
for(j=0;j<SIZE;j++)
{
data[i][j]=PCB[i][j];
visited[i][j]=0;
if(PCB[i][j]==65)//A点
{
a=i;
b=j;
}
if(PCB[i][j]==66)//B点
{
c=i;
d=j;
}
}
if( (a==-1 && b==-1) || (c==-1 && d==-1) )
return -1;
data[c][d]=-10;//B点
/************************************BFS*******************************************/
int rear=0,front=1,x=0,y=0;
array[0].x=a;//原点进栈
array[0].y=b;
array[0].layer=0;// 初始化层数
while( !(array[rear].x==-2 && array[rear].y==-2) )
{
x=array[rear].x;//获取栈中保存的坐标
y=array[rear].y;
visited[ x ][ y ]=1;
for(k=0;k<4;k++)
{
if( x+offset[k][0]>=0 && x+offset[k][0] < SIZE &&
y+offset[k][1]>=0 && y+offset[k][1] < SIZE &&
visited[ x+offset[k][0] ][ y+offset[k][1] ] ==0
)
{
if( data[ x+offset[k][0] ][ y+offset[k][1] ] !=88 &&
data[ x+offset[k][0] ][ y+offset[k][1] ] !=65 &&
data[ x+offset[k][0] ][ y+offset[k][1] ] !=66
)//符合条件进栈
{
array[front].x=x+offset[k][0];
array[front].y=y+offset[k][1];
array[front].layer=array[rear].layer+1;
front++;
}
visited[ x+offset[k][0] ][ y+offset[k][1] ]=1;//该点被访问, 不可省略,特殊情况要考虑是否越界(chess越界)
}
}
if(array[rear].layer>0)
data[x][y]=array[rear].layer;
rear++;
}
/**********************************************************************************/
min = data[ c+offset[k][0] ][ d+offset[k][1] ];
if(min==-10)
return -1;
else
return min;
}
/*****************************************************************************************************************************************************************************/
int visited[M][M]={0};
void DFS(int x,int y, int array[M][M])
{
int k=0,tmpx=0,tmpy=0;
visited[x][y]=1;
array[x][y]=2;
for(k=0;k<4;k++)
{
tmpx=x+offset[k][0];
tmpy=y+offset[k][1];
if( tmpx >=1 && tmpx <= N &&
tmpy >=1 && tmpy <= N &&
visited[ tmpx ] [ tmpy ] ==0
)
{
if( data[ tmpx ][ tmpy ]==1)
DFS( tmpx , tmpy ,array);
}
}
}