讨论 / 思路~(求大神勿喷),内附代码,如果有更好的想法的可以一起讨论
whitefeather 2016-07-17 02:46:07
点我顶贴 收藏 删除
简单bfs

Key:记录一下Bfs的层数(即搜了多少层)

Idea:在结构体中加x,y,step(层数)

代码实现:

//求最短路径 Key;记录bfs层数

//2016/7/17

#include<iostream>

#include<cstdio>

using namespace std;

const int MAX=2010;

struct Point{

int x;

int y;

int step;

}que[5000002];

int dx[4]={-1,0,0,1};

int dy[4]={0,-1,1,0};

int map[MAX][MAX],n,m;

void bfs(int x,int y,int x1,int y1)

{

int f=1,l=1,step=0,xx,yy,length;

que[l].x=x;

que[l].y=y;

que[l++].step=0;

map[x][y]=1;

while(f<l)

{

x=que[f].x;

y=que[f].y;

step=que[f].step;//!!!!!!

if(x==x1&&y==y1){

printf("%d\n",step);return;

}

for(int i=0;i<4;i++)

{

xx=x+dx[i];

yy=y+dy[i];

length=step;//length为中间变量

if(xx>=1&&xx<=n&&yy>=1&&yy<=m){

if(map[xx][yy]==0){

map[xx][yy]=1;

length++;

que[l].x=xx;

que[l].y=yy;

que[l++].step=length;

}

}

}

f++;

}

printf("No Answer!\n");return;

}

int main()

{

int x,y,x1,y1;

while(~scanf("%d %d",&n,&m))

{

for(int i=1;i<=n;i++)

for(int j=1;j<=m;j++)

scanf("%d",&map[i][j]);

scanf("%d %d",&x,&y);

scanf("%d %d",&x1,&y1);

bfs(x,y,x1,y1);

}

return 0;

}

查看更多回复
提交回复