zoukankan      html  css  js  c++  java
  • The Monocycle,UVa 10047(状态记录广搜)

    题目链接:http://acm.hust.edu.cn/vjudge/problem/36951

    题意:

    一辆独轮车,他的车轮每72度变一个颜色(蓝,白,绿,黑,红)。。每秒有3种操作,左转,右转,或者前进,前进的时候车轮的颜色会向前进一色.要求出到终点且车轮触底颜色为蓝色的最小时间。

    初始时间为轮子触底为蓝,朝向北

    源代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<queue>
    using namespace std;
    char a[30][30];
    int vis[30][30][4][5];
    int n,m;
    int dx[4]={-1,0,1,0};
    int dy[4]={0,1,0,-1};
    struct node{
        int x,y,di,co,t;
        node(int xx,int yy,int d,int c,int st)
        {
            x=xx;y=yy;di=d;co=c;t=st;
        }
    };
    queue<node> q;
    void bfs()
    {
        while(!q.empty())
        {
            node u=q.front();
            q.pop();
            if(a[u.x][u.y]=='T'&&u.co==0)
            {
                printf("minimum time = %d sec
    ",u.t);
                return;
            }
            int x=u.x,y=u.y,co=u.co;
            int di=(u.di+1)%4;//向右转
            if(!vis[x][y][di][co])
            {
                vis[x][y][di][co]=1;
                q.push(node(x,y,di,co,u.t+1));
            }
            di=(u.di+3)%4;//向左转
            if(!vis[x][y][di][co])
            {
                vis[x][y][di][co]=1;
                q.push(node(x,y,di,co,u.t+1));
            }
            di=u.di;//前进
            x+=dx[di];y+=dy[di];
            co=(co+1)%5;//下一种颜色
            if(x<n&&x>=0&&y<m&&y>=0&&a[x][y]!='#'&&!vis[x][y][di][co])
            {
                q.push(node(x,y,di,co,u.t+1));
                vis[x][y][di][co]=1;
            }
        }
        printf("destination not reachable
    ");
    }
    int main()
    {
        int ss=1;
        while(scanf("%d%d",&n,&m)&&n&&m)
        {
            if(ss>1) printf("
    ");
            memset(vis,0,sizeof(vis));
            while(!q.empty()) q.pop();
            for(int i=0;i<n;i++)
                for(int j=0;j<m;j++)
                {
                    cin>>a[i][j];
                    if(a[i][j]=='S')
                    {
                        q.push(node(i,j,0,0,0));
                        vis[i][j][0][0]=1;
                    }
                }
            printf("Case #%d
    ",ss++);
            bfs();
        }
        return 0;
    }
  • 相关阅读:
    C#小型资源管理器
    C#换肤LrisSkin
    面向对象的24种设计模式
    七大设计原则
    非泛型集合和泛型集合
    C#经理评价系统
    深入C#.NET框架
    C#窗口航空总结
    java基础数据结构和语法
    HTML
  • 原文地址:https://www.cnblogs.com/q-c-y/p/5688903.html
Copyright © 2011-2022 走看看