题意:从点(0,0)出发,目的地为(x,y),其中有一些点不能通过,求最短距离。
分析:bfs
View Code
#include <cstdio> #include <cstring> #include <iostream> #include <queue> using namespace std; const int maxn = 1010; bool vis[maxn][maxn]; int dir[4][2] = { {0,-1},{0,1},{-1,0},{1,0} }; struct Node { int x,y,step; }; int X ,Y , n; void bfs() { Node u , v; queue<Node> Q; u.x = 0; u.y = 0; u.step = 0; Q.push(u); vis[0+500][0+500] = 1; while(!Q.empty()) { u = Q.front(); Q.pop(); if(u.x==X && u.y==Y) { printf("%d\n",u.step); return; } for(int i=0;i<4;i++) { int x = u.x + dir[i][0]; int y = u.y + dir[i][1]; if(vis[x+500][y+500]) continue; vis[x+500][y+500] = 1; v.x = x; v.y = y; v.step = u.step + 1; Q.push(v); } } } int main() { while(~scanf("%d%d%d",&X,&Y,&n)) { memset(vis,0,sizeof(vis)); while(n--) { int u , v; scanf("%d%d",&u,&v); vis[u+500][v+500] = 1; } bfs(); } return 0; }