#include
const int MAX=625;
using namespace std;
typedef struct node
{
int x,y;
}N;
typedef struct answer//记得只需要比较x,y字典序
{
int dir;
int x,y;
int step;
}A;
A re_ans,ans;//开全局
char map[MAX][MAX];
int n,m,tal;//tal表示可以吃的路的长
bool visited[MAX][MAX];
int dir[4][2]={{0,1},{-1,0},{1,0},{0,-1}};//E,N,S,W
int flag;//标志一开始方向
int re_dir;//最终方向
//void DFS(int dir,int x,int y,int step)
//{
// N cur;
// cur.x=x;
// cur.y=y;
// visited[x][y]=true;
// for(int i=0;i<4;i++)
// {
// if(step==1)
// {
// flag=i;
// cout<<"这里是:"<=0 && cur.x=0 && cur.yans.step)//求最大
// {
// ans.step=step;
// ans.dir=flag;
// }
// }
//}
void DFS(int dir1,int x,int y,int step)
{
N cur;
cur.x=x;
cur.y=y;
visited[cur.x][cur.y]=true;
cur.x=x+dir[dir1][0];
cur.y=y+dir[dir1][1];
if(cur.x<0 || cur.x>=m || cur.y<0 || cur.y>=n
|| visited[cur.x][cur.y]==true || map[cur.x][cur.y]=='X')//遇到障碍
{
for(int i=0;i<=3;i++)
{
if(i==dir1)
continue;
cur.x=x+dir[i][0];
cur.y=y+dir[i][1];
if(cur.x>=0 && cur.x=0 && cur.yans.step)//求最大
{
ans.step=step;
ans.dir=flag;
}
}
}
else
{
visited[cur.x][cur.y]=true;
DFS(dir1,cur.x,cur.y,step+1);
visited[cur.x][cur.y]=false;
}
}
void init(int i,int j)
{
memset(visited,false,sizeof(visited));
ans.step=0;//这个作为中间最优
flag=-1;//初始方向
ans.x=i;
ans.y=j;
}
void DFS_first(int x,int y,int step)
{
N cur;
cur.x=x;
cur.y=y;
visited[cur.x][cur.y]=true;
for(int i=0;i<4;i++)
{
flag=i;
cur.x=x+dir[i][0];
cur.y=y+dir[i][1];
if(map[cur.x][cur.y]=='.' && visited[cur.x][cur.y]==false
&& cur.x>=0 && cur.x=0 && cur.y<=n)
{
visited[cur.x][cur.y]=true;
DFS(flag,cur.x,cur.y,step+1);
visited[cur.x][cur.y]=false;
if(step>ans.step)//求最大
{
ans.step=step;
ans.dir=flag;
}
}
}
}
int main(void)
{
int cas_c=1;
while(scanf("%d%d",&m,&n),n||m)
{
re_ans.step=0;//这个最开始初始化
for(int i=0;i<=m;i++)
for(int j=0;j<=n;j++)
map[i][j]='.';
int num,i,j,x,y;
scanf("%d",&num);
//tal=m*n-num;
for(i=0;ire_ans.step)
{
re_ans=ans;
}
else if(ans.step==re_ans.step)
{
if(ans.x )> ;i++)>
相关文章: