关闭

poj1573(模拟bfs)

标签: ini
250人阅读 评论(0) 收藏 举报
分类:

             题目链接:http://poj.org/problem?id=1573

        题意:一个row*col的矩阵上,每个格子写了机器人的运动方向(N:向上,S:向下,E:向右,W:向左)。给出机器人的起点,若最后机器人是出了矩阵,则输出走过的格数,若最后机器人永远在矩阵内运动,则输出循环前后的格数。

代码:

#include<stdio.h>
char gird[11][11];
int n,m,k,flag,flag1,num,num1;
void dfs(int row,int col)
{
	    
	if(row<0||row==n||col<0||col==m)
	{ flag=1; return; } 
   	if(gird[row][col]==1)
	{   
		flag=0;
	    gird[row][col]=0;
        return ;
	}
	num++;
	if(gird[row][col]-'N'==0){gird[row][col]=1;dfs(row-1,col);} 
	else if(gird[row][col]-'S'==0) {gird[row][col]=1;dfs(row+1,col);} 
    else if(gird[row][col]-'E'==0){gird[row][col]=1;dfs(row,col+1);} 
	else if(gird[row][col]-'W'==0){gird[row][col]=1;dfs(row,col-1);} 
	if(gird[row][col]==0)flag1=1;
 	if(flag1) num1++;
    return;
}
void main()
{
	while((scanf("%d%d%d",&n,&m,&k)!=EOF)&&(n!=0&&m!=0&&k!=0))
	{
		int i;
		for(i=0;i<n;i++)
		scanf("%s",gird[i]);
		num=0;
		num1=0;
		flag1=0;
	    dfs(0,k-1);
		if(flag)
			printf("%d step(s) to exit\n",num);
         else
		 printf("%d step(s) before a loop of %d step(s)\n",num1-1,num-num1+1);
		 
	}
}


 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场