1 条题解
-
0
C++ :
#include<bits/stdc++.h> using namespace std; int head,tail,n,m,state[1000100][3],s,x,y,sx,sy,qx,qy; bool f[1010][1010];//标记点是否走过 int a[1010][1010]; int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};//拓展方向 void bfs() { head=0; tail=1; state[1][0] = sx; state[1][1] = sy; do { head++;//出队 for (int i=0;i<4;i++)//4个方向 { x=state[head][0];y=state[head][1]; int j=1; while (a[x+dx[i]*j][y+dy[i]*j] == 0 && x+dx[i]*j<=n && y+dy[i]*j<=m && x+dx[i]*j>0 && y+dy[i]*j>0) //如果碰到墙或边缘就结束拓展 { if (f[x+dx[i]*j][y+dy[i]*j] == false) //如果已经走过的路线就不入队 { tail++;//入队 state[tail][0]=x+dx[i]*j; state[tail][1]=y+dy[i]*j;//储存位置 state[tail][2]=state[head][2]+1;//储存转弯数 f[x+dx[i]*j][y+dy[i]*j]=true;//已经走过该地 if (x+dx[i]*j==qx && y+dy[i]*j==qy)//结束判断 { s=state[tail][2]; return; } } j++;//下一个拓展 } } } while(head<tail);//空队退出 } int main() { cin>>n>>m; for (int i=1;i<=n;i++) { for (int j=1;j<=m;j++) { cin>>a[i][j]; } } cin>>sx>>sy>>qx>>qy; // scanf("%d%d%d%d",&state[1][0],&state[1][1],&qx,&qy); //输入不解释 bfs();//函数不解释 cout<<s-1<<endl; }
- 1
信息
- ID
- 2364
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者