ZOJ 1438

来源:互联网 发布:园林景观设计制图软件 编辑:程序博客网 时间:2024/06/07 06:44

这个题目我真是不想说什么了,看了一个中午看懂的题目,然后写了一个中午错误,换种方法还是错误,真的是要被气死了,先放在这里有空来改。。。。。
注意啊这是错误程序

#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <string>#include <queue>#include <cstring>using namespace std;const int maxn=12;char str[maxn][maxn][maxn];int sc,sr,sz,ec,er,ez;int n;int X[]={0,0,1,-1,0,0};int Y[]={1,-1,0,0,0,0};int Z[]={0,0,0,0,1,-1};int vis[maxn][maxn][maxn];const int INF=1e9;int BFS(){    typedef  pair<int ,int> p;    typedef  pair<p,int> pp;    queue<pp> q;//    q.clear();    q.push(pp(p(sz,sr),sc));    vis[sz][sr][sc]=0;    while(q.size())    {        pp p1=q.front();        q.pop();        if(p1.first.first==ez&&p1.first.second==er&&p1.second==ec) break;        for(int i=0;i<6;i++)        {            int mz=p1.first.first+Z[i];            int mx=p1.first.second+X[i];            int mc=p1.second+Y[i];            if(mz>=0&&mz<n&&mx>=0&&mx<n&&mc>=0&&mc<n&&str[mz][mx][mc]!='X'&&vis[mz][mx][mc]==INF)            {                q.push(pp(p(mz,mx),mc));                vis[mz][mx][mc]=vis[p1.first.first][p1.first.second][p1.second]+1;            }        }    }    return vis[ez][er][ec];}int main(){    string s;    while(cin>>s>>n)    {        memset(str,0,sizeof(str));        memset(vis,0,sizeof(vis));        getchar();        for(int i=0;i<n;i++)        {            for(int j=0;j<n;j++)            {                for(int k=0;k<n;k++)                {                   scanf("%c",&str[k][j][i]);                   vis[i][j][k]=INF;                }                getchar();            }        }    scanf("%d%d%d",&sc,&sr,&sz);    scanf("%d%d%d",&ec,&er,&ez);    vis[sz][sr][sc]=0;    string ss;    cin>>ss;    if(vis[ez][er][ec]!=INF)    {        printf("%d %d\n",n,vis[ez][er][ec]);    }    else    printf("NO ROUTE\n");    }    return 0;}
#include <cstdio>#include <cstdlib>#include <algorithm>#include <iostream>#include <queue>#include <cstring>#include <string>using namespace std;const int maxn=13;char str[maxn][maxn][maxn];int vis[maxn][maxn][maxn];int n;int sx,sy,sz,ex,ey,ez;int X[]={0,0,1,-1,0,0};int Y[]={1,-1,0,0,0,0};int Z[]={0,0,0,0,1,-1};struct Point{    int x,y,z;    int num;    Point ()    {        int x=0,y=0,z=0;        int num=0;    }};const int INF=1e8;int BFS(){    queue<Point> q;    Point p;    p.x=sx,p.y=sy,p.z=sz;    p.num=0;    q.push(p);    while(q.size())    {        Point pp=q.front();        q.pop();        if(pp.x==ex&&pp.y==ey&&pp.z==ez) return pp.num;        for(int i=0;i<6;i++)        {            int mx=pp.x+X[i];            int mz=pp.y+Y[i];            int my=pp.z+Z[i];            if(mx>=0&&mx<n&&mz>=0&&mz<n&&my>=0&&my<n&&vis[mx][my][mz]==INF&&str[mx][my][mz]!='X')            {                Point pq;                pq.x=mx,pq.y=my,pq.z=mz;                pq.num=pp.num+1;                vis[mx][my][mz]=pp.num+1;            }        }    }    return -1;}int main(){   string  ss;   while(cin>>ss>>n)   {       memset(str,0,sizeof(str));       memset(vis,0,sizeof(vis));       getchar();       for(int i=0;i<n;i++)       {           for(int j=0;j<n;j++)           {               for(int k=0;k<n;k++)               {                   scanf("%c",&str[k][j][i]);                   vis[k][j][i]=INF;               }                 getchar();           }       }       cin>>sy>>sx>>sz;       cin>>ey>>ex>>ez;       vis[sy][sx][sz]=0;       string s;       cin>>s;       int temp=BFS();       if(temp!=-1)        printf("%d %d\n",n,temp);       else        printf("NO ROUTE\n");   }   return 0;}
0 0