vincent125 @ 2023-07-19 21:03:24
using namespace std;
long long m,n,m1,m2,c[1999][1999],wz1,wz2,wz3,wz4,vis[1999][1999],xd[9],yd[9];
//struct p{
// int ;
//};
//queue <p > q;
void dfs(int aa,int bb,int bs){
vis[aa][bb]=1;
if(aa==wz3&&bb==wz4){
cout<<bs;
return ;
}
for(int i=1;i<=8;i++){
int xss=aa+xd[i],yss=bb+yd[i];
if(xss>=0&&xss<m&&yss>=0&&yss<n&&!vis[xss][yss]){
vis[xss][yss]=1;
dfs(xss,yss,bs+1);
}
}
}
int main(){
cin>>m>>n>>m1>>m2;
xd[1]=m1;xd[2]=m1;xd[3]=0-m1;xd[4]=0-m1;
yd[5]=m1;yd[6]=m1;yd[7]=0-m1;yd[8]=0-m1;
xd[5]=m2;xd[6]=0-m2;xd[7]=0-m2;xd[8]=m2;
yd[1]=m2;yd[2]=0-m2;yd[3]=0-m2;yd[4]=m2;
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
cin>>c[i][j];
if(c[i][j]==0) vis[i][j]=1;
if(c[i][j]==2) vis[i][j]=1;
if(c[i][j]==3) {wz1=i,wz2=j;}
if(c[i][j]==4) {wz3=i,wz4=j;}
}
}
dfs(wz1,wz2,0);
return 0;
}
by Max6700 @ 2023-07-19 21:27:27
用bfs啊[逃]
by Max6700 @ 2023-07-19 21:36:10
struct aa
{
/*
xxxx
*/
}
queue <aa> q;//bfs队列 ,前面要结构体,里面装x、y、cnt(坐标的x、y和步数cnt
int bfs()
{
q.push(aa{x1,yz,0});//记入
v[x1][yz]=1;//标记起点坐标走过
while(q.empty()==0)//bfs模板
{
int x=q.front().x;
int y=q.front().y;
int cnt=q.front().cnt;
if(x==x2 && y==y2)//到达终点
return cnt;
q.pop();//清除队首
/*
主函数内把移动方向的x、y差存入dx和dy
*/
for(int i=0;i<8;i++)//根据坐标差移动
{
int nx=x+dx[i];
int ny=y+dy[i];
int nc=cnt+1;//步数++
if(nx<=n && nx>=1 && ny<=m && ny>=1 && v[nx][ny]==0 && a[nx][ny]==1)//没越界+没走过+是花
{
v[nx][ny]=1;//走过
q.push(aa{nx,ny,nc});//填入
}
}
}
}
给你个思路
by Max6700 @ 2023-07-19 21:39:46
a了记得吱一声
by vincent125 @ 2023-07-25 20:01:01
@Max6700 我用DFS A 的 [笑脸]
by vincent125 @ 2023-07-25 20:01:29
@Max6700 THANK YOU ~