C

· · 个人记录

#include <bits/stdc++.h>
using namespace std;
int n,m,sx,sy,ex,ey,head,tail;
char a[1001][1001];
int q[1000001][4];
int d[]={0,0,1,0,-1,0};
void print(int k){
    if (q[k][3]!=0)
    print(q[k][3]);
    printf("(%d,%d)",q[k][1],q[k][2]);
    if (k!=tail)
    cout<<"->";
}
int main(){
    while (1){
        head=tail=1;
        cin>>n>>m;
        if (n==0&&m==0)
        break;
        bool f=1;
        memset(q,0,sizeof(q));
        for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
        cin>>a[i][j];
        cin>>sx>>sy>>ex>>ey;
        q[1][1]=sx;
        q[1][2]=sy;
        q[1][3]=0;
        while (head<=tail&&f){
            int tx,ty;
            for (int i=1;i<=4;i++){
                tx=q[head][1]+d[i];
                ty=q[head][2]+d[i+1];
                if (tx>0&&tx<=n&&ty>0&&ty<=m&&a[tx][ty]=='.'){
                    a[tx][ty]='#';
                    tail++;
                    q[tail][1]=tx;
                    q[tail][2]=ty;
                    q[tail][3]=head;
                }
                if (tx==ex&&ty==ey){
                    print(tail);
                    cout<<endl;
                    f=0;
                    break;
                }
            }
            head++;
        }
    }   
    return 0;
}