搜索水题
哎 直接不行了 。
#include <ctype.h> #include <cstdio> void read(int &x) { x=0;char ch=getchar(); while(!isdigit(ch)) ch=getchar(); while(isdigit(ch)) {x=x*10+int(ch-48);ch=getchar();} } int ans,sx,sy,tx,ty,n,m,t,atlas[11][11][11][11],fx[5]={1,-1,0,0},fy[5]={0,0,-1,1}; void bfs(int a,int b,int c,int d) { int f[1111][3],l=0,r=0; f[++r][1]=a;f[r][2]=b; do { int x_=f[++l][1],y_=f[l][2]; for(int i=0;i<4;i++) { int t_x=x_+fx[i],t_y=y_+fy[i]; if(atlas[x_][y_][t_x][t_y]==0&&t_x>=1&&t_x<=n&&t_y>=1&&t_y<=m) { if(t_x==c&&t_y==d) ans++; atlas[x_][y_][t_x][t_x]=1; f[++r][1]=t_x;f[r][2]=t_y; } } }while(l<r); } int main() { read(n);read(m);read(t); read(sx);read(sy);read(tx);read(ty); for(int x,y;t--;) { read(x);read(y); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) atlas[x][y][i][j]=1; } } bfs(sx,sy,tx,ty); printf("%d",ans); return 0; }
40分 有兴趣帮忙看看
#include <ctype.h> #include <cstdio> void read(int &x) { x=0;char ch=getchar(); while(!isdigit(ch)) ch=getchar(); while(isdigit(ch)) {x=x*10+int(ch-48);ch=getchar();} } bool za[11][11]; int ans,n,m,t,sx,sy,tx,ty,fx[5]={1,-1,0,0},fy[5]={0,0,-1,1}; void dfs(int x,int y) { za[x][y]=1; if(x==tx&&y==ty) {ans++;return;} for(int i=0;i<4;i++) { int t_x=x+fx[i],t_y=y+fy[i]; if(t_x>=1&&t_x<=n&&t_y>=1&&t_y<=m&&!za[t_x][t_y]) { dfs(t_x,t_y); za[t_x][t_y]=0; } } } int main() { read(n); read(m); read(t); read(sx);read(sy);read(tx);read(ty); for(int x,y;t--;) { read(x); read(y); za[x][y]=1; } dfs(sx,sy); printf("%d",ans); return 0; }
AC
时间: 2024-11-29 13:51:02