I - 贪吃蛇
裸的BFS
首先把目前的每个点加入队列中
然后每个点四周可以走的步数 + 1 ,并且入队即可
#include<iostream> #include<queue> using namespace std; struct G{ int x, y ,s; }; queue<G> q; char a[110][110] ; int dx[] = {0,0,1,-1} , dy[] = {1,-1,0,0}; int main(){ int n , m ; cin >> n >> m; int x1 ,y1 ,x2 ,y2; cin >> x1 >> y1 >> x2 >> y2 ; getchar(); for(int i = 0 ; i < n ; i ++ ) cin >> a[i]; q.push({x1 - 1,y1 - 1,0}); a[x2 - 1][y2 - 1] = 'E'; while(q.size()){ G t = q.front(); if(a[t.x][t.y] == 'E') break; q.pop(); a[t.x][t.y] = '#'; for(int i = 0 ; i < 4 ; i ++){ int x = t.x + dx[i] , y = t.y + dy[i]; if(x >= 0 && x < n && y >= 0 && y < m && a[x][y] != '#'){ q.push({x,y,t.s + 1}); } } } if(q.empty()) printf("-1\n"); else printf("%d",q.front().s * 100); return 0; }