Aize 0558 Cheese——————BFS 拼搏现实的明天。 2021-12-01 14:46 166阅读 0赞 # [Cheese][] # **問題** 在H \* W的地图上有N个奶酪工厂,每个工厂分别生产硬度为1-N的奶酪。有一只老鼠准备从出发点吃遍每一个工厂的奶酪。老鼠有一个体力值,初始时为1,每吃一个工厂的奶酪体力值增加1(每个工厂只能吃一次),且老鼠只能吃硬度不大于当前体力值的奶酪。 老鼠从当前格到上下左右相邻的无障碍物的格需要时间1单位,有障碍物的格不能走。走到工厂上时即可吃到该工厂的奶酪,吃奶酪时间不计。问吃遍所有奶酪最少用时 **入出力例** 输入:第一行三个整数H(1 <= H <= 1000)、W(1 <= W <=1000)、N(1 <= N <= 9),之后H行W列为地图, “.“为空地, ”X“为障碍物,”S“为老鼠洞,N表示有N个生产奶酪的工厂,硬度为1-N。 **入力例 1** 3 3 1 S… … …1 **出力例 1** 4 **入力例 2** 4 5 2 .X…1 …X .XX.S .2.X. **出力例 2** 12 **入力例 3** 10 10 9 .X…X.S.X 6…5X…X1X …XXXX…X X…9X…X. 8.X2X…X3X …XX.X4… XX…7X… X…X…XX… X…X.XX… …X… **出力例 3** 91 問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。 -------------------- 本来用dfs做的,不过一直超时。。难受 应该用bfs做的 //#include<bits/stdc++.h> #include<cstdio> #include<iostream> #include<cmath> #include<string> #include<cstring> #include<algorithm> #include<queue> #include<map> #include<bitset> #include<set> #include<vector> using namespace std; typedef long long ll; typedef pair<int ,int> P; const int INF = 0x3f3f3f3f; const int MAXN = 1e3+7; char maze[MAXN][MAXN]; int d[MAXN][MAXN]; int gx[22]; int gy[22]; bool vis[MAXN][MAXN]; int dx[] = { 0, 0, 1, -1}; int dy[] = { 1, -1, 0, 0}; int minStep, n, m, k; int sx,sy; bool check(int x, int y){ return x>=0 && y>=0 && x<n && y<m && maze[x][y]!='X'&&d[x][y]==INF; } int bfs(int sx,int sy, int ex, int ey){ memset(d,0x3f,sizeof(d)); queue<P> que; que.push(P(sx,sy)); d[sx][sy] = 0; while(!que.empty()){ P p = que.front(); que.pop(); if(p.first==ex&&p.second==ey) break; for(int i=0;i<4;++i){ int nx = p.first + dx[i]; int ny = p.second + dy[i]; if(check(nx,ny)){ que.push(P(nx,ny)); d[nx][ny] = d[p.first][p.second] + 1; } } } return d[ex][ey]; } int main(){ // freopen("../in.txt","r",stdin); // freopen("../out.txt","w",stdout); while(~scanf("%d %d %d",&n,&m,&k)){ for(int i=0;i<n;++i) scanf("%s", maze[i]); for(int i=0;i<n;++i) for(int j=0;j<m;++j) if(maze[i][j]=='S'){ gx[0] = i; gy[0] = j; } else if(maze[i][j]>='0' && maze[i][j]<='9'){ int t = maze[i][j] - '0'; gx[t] = i; gy[t] = j; } int ans = 0; for(int i=1;i<=k;++i) ans += bfs(gx[i-1], gy[i-1], gx[i], gy[i]); printf("%d\n",ans); } return 0; } [Cheese]: http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0558
相关 Aizu 0558 Description 問題 今年も JOI 町のチーズ工場がチーズの生産を始め,ねずみが巣から顔を出した.JOI 町は東西南北に区画整理されていて,各区画は 你的名字/ 2022年08月21日 11:58/ 0 赞/ 40 阅读
相关 aoj0558 一、题意: 在H \ W的地图上有N个奶酪工厂,分别生产硬度为1-N的奶酪。有一只吃货老鼠准备从老鼠洞出发吃遍每一个工厂的奶酪。老鼠有一个体力值,初始时为1,每吃一个工厂的奶酪 今天药忘吃喽~/ 2022年01月09日 09:43/ 0 赞/ 151 阅读
相关 Aize 0558 Cheese——————BFS [Cheese][] 問題 在H \ W的地图上有N个奶酪工厂,每个工厂分别生产硬度为1-N的奶酪。有一只老鼠准备从出发点吃遍每一个工厂的奶酪。老鼠有一个体力值,初始 拼搏现实的明天。/ 2021年12月01日 14:46/ 0 赞/ 167 阅读
还没有评论,来说两句吧...