1 条题解
-
0
提一嘴这题的暴搜。
首先看到图上每个点,若该点为车,那么从这个点开始搜索,循环判断在这辆车朝向的一条直线上,还有没有拦住它的车,如果有,就从该辆拦路车的位置继续搜索,一直到搜到的位置的车没有拦路车,就输出该车,并标记该车已出停车场,再回溯继续处理。
#include <bits/stdc++.h> using namespace std; #define pii pair<int,int> #define fi first #define se second int n,m,d; char c[2010][2010]; void solve (int x,int y) { if (c[x][y]=='N') { for (int i=x-1;i>=0;i--) if (c[i][y]!='.') { solve (i,y); printf ("(%d,%d)\n",i,y); } } if (c[x][y]=='S') { for (int i=x+1;i<n;i++) if (c[i][y]!='.') { solve (i,y); printf ("(%d,%d)\n",i,y); } } if (c[x][y]=='W') { for (int i=y-1;i>=0;i--) if (c[x][i]!='.') { solve (x,i); printf ("(%d,%d)\n",x,i); } } if (c[x][y]=='E') { for (int i=y+1;i<m;i++) if (c[x][i]!='.') { solve (x,i); printf ("(%d,%d)\n",x,i); } } c[x][y]='.'; } int main () { freopen ("cars.in","r",stdin); freopen ("cars.out","w",stdout); cin>> n>> m; for (int i=0;i<n;i++) for (int j=0;j<m;j++) cin>> c[i][j]; for (int i=0;i<n;i++) for (int j=0;j<m;j++) if (c[i][j]!='.') { solve (i,j); printf ("(%d,%d)\n",i,j); } fclose (stdin); fclose (stdout); return 0; }吸氧 AC。
- 1
信息
- ID
- 10662
- 时间
- 5000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者