2 条题解
-
0
#include<bits/stdc++.h> using namespace std; int dx[12]= {0,1,0,-1}; int dy[12]= {1,0,-1,0}; struct node {int x,y,dep;};bool v[110][110],Map[110][110]; deque<node>Q; int main() { int n,m;scanf("%d%d",&n,&m); memset(Map,0,sizeof(Map)); for(int i=1;i<=n;i++) { char ss[110];scanf("%s",ss+1); for(int j=1;j<=m;j++) Map[i][j]=(ss[j]=='1'); } int t;scanf("%d",&t); while(t--) { node stno,edno; scanf("%d%d%d%d",&stno.x,&stno.y,&edno.x,&edno.y); stno.dep=0; memset(v,0,sizeof(v));v[stno.x][stno.y]=1; Q.clear();Q.push_back(stno); bool bk=0; while(!Q.empty()) { node no=Q.front();Q.pop_front(); for(int i=0;i<4;i++) { node tno=no; tno.x+=dx[i]; tno.y+=dy[i]; tno.dep++; if(Map[tno.x][tno.y]==1&&v[tno.x][tno.y]==0) //这里Map数组自动判排除了no.x、no.y越界问题 { v[tno.x][tno.y]=1; Q.push_back(tno); if(tno.x==edno.x && tno.y==edno.y) {bk=1;break;} } } if(bk==1) break; } if(bk==1)printf("%d\n",Q.back().dep);else printf("Impossible\n"); } return 0; } -
0
#include<bits/stdc++.h> using namespace std; int dx[12]= {0,1,0,-1}; int dy[12]= {1,0,-1,0}; struct node {int x,y,dep;};bool v[110][110],Map[110][110]; deque<node>Q;</p>int main() { int n,m;scanf("%d%d",&n,&m); memset(Map,0,sizeof(Map)); for(int i=1;i<=n;i++) { char ss[110];scanf("%s",ss+1); for(int j=1;j<=m;j++) Map[i][j]=(ss[j]=='1'); }
int t;scanf("%d",&t); while(t--) { node stno,edno; scanf("%d%d%d%d",&stno.x,&stno.y,&edno.x,&edno.y); stno.dep=0; memset(v,0,sizeof(v));v[stno.x][stno.y]=1; Q.clear();Q.push_back(stno); bool bk=0; while(!Q.empty()) { node no=Q.front();Q.pop_front(); for(int i=0;i<4;i++) { node tno=no; tno.x+=dx[i]; tno.y+=dy[i]; tno.dep++; if(Map[tno.x][tno.y]==1&&v[tno.x][tno.y]==0) //这里Map数组自动判排除了no.x、no.y越界问题 { v[tno.x][tno.y]=1; Q.push_back(tno); if(tno.x==edno.x && tno.y==edno.y) {bk=1;break;} } } if(bk==1) break; } if(bk==1)printf("%d\n",Q.back().dep);else printf("Impossible\n"); } return 0;}
- 1
信息
- ID
- 90
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 67
- 已通过
- 45
- 上传者