Biridian Forest CodeForces - 329B (逆向bfs)
2017-08-12 13:46
330 查看
题目链接:点我
题意:
实际上就是问有多少人可以在开始位置S之前到达终点.
思路:
逆向bfs,记录从终点开始到每个点的距离,然后找出所有的距离比起点离终点小的点,把他们的人数加起来即可.
代码:
题意:
实际上就是问有多少人可以在开始位置S之前到达终点.
思路:
逆向bfs,记录从终点开始到每个点的距离,然后找出所有的距离比起点离终点小的点,把他们的人数加起来即可.
代码:
#include<cstdio> #include<cstring> #include<cmath> #include<iostream> using namespace std; const int maxn = 1000+5; char w[maxn][maxn]; bool vis[maxn][maxn]; int d[maxn][maxn]; struct ss{ int x, y; }q[maxn * 1000]; int sx, sy, tx, ty ,ans, n, m; int dx[]={1,-1,0,0}; int dy[]={0,0,1,-1}; bool judge(int x,int y){ if(x > 0 && y > 0 && x <= n && y <= m &&!vis[x][y]) return true; return false; } int bfs(){ int head=0,tail =1; vis[tx][ty] = true; q[0].x = tx; q[0].y = ty; d[tx][ty] = 0; while(head<tail){ ss p = q[head++]; int step = d[p.x][p.y] + 1; for(int i = 0; i < 4; ++i){ 4000 int x = p.x + dx[i]; int y = p.y + dy[i]; if(judge(x, y)){ q[tail].x = x; q[tail++].y = y; vis[x][y] = true; d[x][y] = step; } } } return 0; } int main(){ memset(vis,false,sizeof(vis)); memset(d,127,sizeof(d)); scanf("%d %d", &n, &m); for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j){ scanf(" %c", &w[i][j]); if(w[i][j] == 'E') tx = i, ty = j; if(w[i][j] == 'S') sx = i, sy = j; if(w[i][j] == 'T') vis[i][j] = true; }ans =0; bfs(); for(int i = 1; i <= n; ++i) for(int j = 1; j <= m; ++j) if(d[i][j] <= d[sx][sy] && w[i][j] >='0' && w[i][j] <= '9') ans += w[i][j]- '0'; printf("%d\n",ans); return 0; }
相关文章推荐
- Codeforces Round #192 (Div. 1) B. Biridian Forest 暴力bfs
- Codeforces Round #192 (Div. 2) D. Biridian Forest (水bfs)
- E - Biridian Forest CodeForces - 330D(BFS)
- Codeforces Round #192 (Div. 1) B. Biridian Forest(BFS)
- codeforces 329B B. Biridian Forest 精巧的bfs
- CodeForces - 330D Biridian Forest(逆向bfs)
- codeforces Biridian Forest
- [Codeforces Round #192 (Div. 2)] D. Biridian Forest
- Codeforces #285 C Misha and Forest 队列维护 解题报告
- 【Codeforces Round 329 (Div 2) B】【映射 排序 贪心】Anton and Lines 查看所有直线pair在[x1,x2]范围内是否有交点
- Codeforces Round #285 (Div. 2) C. Misha and Forest
- Codeforces Round #192 (Div. 2) DBiridian Forest
- Codeforces Round #329 (Div. 2) (A, B)
- 【Codeforces Round 329 (Div 2) A】【暴力枚举】2Char 选单词最多只含2字符
- Codeforces Round #285 (Div. 2) C. Misha and Forest
- codeforces Transformation: from A to B dfs+bfs
- DFS/BFS Codeforces Round #301 (Div. 2) C. Ice Cave
- Misha and Forest CodeForces - 501C
- Codeforces Round #285 (Div. 2) C. Misha and Forest
- 【Educational Codeforces Round 10E】【双连通分量缩环 BFS】Pursuit For Artifacts 从ST到ED每条边最多经过一次能否经过任一特殊边