链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=58
经典的迷宫问题,,,,用BFS穷举:
#include <iostream> #include<queue> #include<utility> #include<cstdio> #define N 9 using namespace std; const int INF=1000000; typedef pair<int,int> pt; int dx[5]={1,0,-1,0}; int dy[5]={0,1,0,-1}; int sx,sy; int gx,gy; int d[10][10]; int maze[9][9]= { {1,1,1,1,1,1,1,1,1} ,{1,0,0,1,0,0,1,0,1} ,{1,0,0,1,1,0,0,0,1} ,{1,0,1,0,1,1,0,1,1} ,{1,0,0,0,0,1,0,0,1} ,{1,1,0,1,0,1,0,0,1} ,{1,1,0,1,0,1,0,0,1} ,{1,1,0,1,0,0,0,0,1} ,{1,1,1,1,1,1,1,1,1} }; int bfs() { int i,j; int nx,ny; queue <pt> que; for(i=0;i<N;i++) for(j=0;j<N;j++) d[i][j]=INF; que.push(pt(sx,sy)); d[sx][sy]=0; while(que.size()) { pt p=que.front(); que.pop(); if(p.first==gx&&p.second==gy) //如果取出的点是终点 break; for(i=0; i<4; i++) { nx=p.first+dx[i]; ny=p.second+dy[i]; if(nx>=0&&ny>=0&&nx<N&&ny<N&&d[nx][ny]==INF&&maze[nx][ny]==0) { que.push(pt(nx,ny)); d[nx][ny]=d[p.first][p.second]+1; } } } return d[gx][gy]; } int main() { freopen("1.txt","r",stdin); int t; cin>>t; int ans; while(t--) { cin>>sx>>sy>>gx>>gy; ans=bfs(); cout<<ans<<endl; } return 0; }