1003. Maze

来源:互联网 发布:如何描述一个java项目 编辑:程序博客网 时间:2024/06/06 14:03

简单而基本的bfs问题,是求解这类问题的基本问题。许多bfs问题都是在这个问题上面衍生而来的。

#include<iostream>#include<queue>using namespace std;int const maxn = 40;int a[maxn][maxn];int isvis[maxn][maxn];int dr[] = {-1,0,1,0};int dc[] = {0,1,0,-1};int n;struct P {    int c;    int r;    int val;}p;bool isin(int r, int c) {    return (r>=0&&r<n&&c>=0&&c<n);}int main() {    while (cin>>n&&n) {        for (int i=0;i<n;i++)          for (int j=0;j<n;j++) {         cin>>a[i][j];         isvis[i][j] = 0;         }         isvis[0][0] = 1;         P temp,aim;         temp.c=0; temp.r=0; temp.val=1;         aim.c=n-1;aim.r=n-1;         queue<P> Q;         Q.push(temp);         int flag = 0;         while (!Q.empty()) {            temp = Q.front();            Q.pop();            for (int i=0;i<4;i++) {                int nc = temp.c+dc[i];                int nr = temp.r+dr[i];                if (isin(nc,nr)&&a[nr][nc]==0&&!isvis[nr][nc]) {                    int nv = temp.val+1;                    P k; k.c =nc; k.r=nr; k.val = nv;                    isvis[nr][nc] = 1;                    if (nc==n-1&&nr==n-1) {                        cout<<nv<<endl;                       flag = 1;                        break;                    }                    Q.push(k);                }                if (flag==1) break;            }         }         if (flag==0) cout<<0<<endl;    }}                                 

改进思想将bfs过程单独写一个函数也行在逻辑上会显得更为简便。
注意,结构体中的val必须初始化!

0 0