• HDU 5612 Baby Ming and Matrix games(DFS)


    题目链接

    题解:题意为给出一个N*M的矩阵,然后(i2,j2) (i,j=0,1,2...)的点处是数字,两个数字之间是符号,其他位置是‘#’号。
    但不知道是理解的问题还是题目描述的问题,数据中还有类似1#1这种数据存在,因此WA了4次,加上了一句代码后,马上AC了,该行代码在下文以斜粗体标出。
    此外,因为里面有除法,会有一定误差,所以用这句来判断:fabs(tar-nnum)<=1e-8,而不是tar==nnum。
     
    #include <cstdio>
    #include <iostream>
    #include <string>
    #include <sstream>
    #include <cstring>
    #include <stack>
    #include <queue>
    #include <algorithm>
    #include <cmath>
    #include <map>
    #define ms(a) memset(a,0,sizeof(a))
    using namespace std;
    #define LOCAL
    char mp[120][120];
    int n,m;
    double tar;
    bool flag;
    int dir[4][2]= {{0,2},{0,-2},{2,0},{-2,0}};
    double cal(double n,double m,char c)
    {
        if(c=='+')return n+m;
        if(c=='-')return n-m;
        if(c=='*')return n*m;
        if(c=='/')return n/m;
        return 0;
    }
    void dfs(int x,int y,double num)
    {
        if(flag)return;
        for(int i=0; i<4; i++)
        {
            int nx=x+dir[i][0],ny=y+dir[i][1];
            if(mp[nx][ny]!='#'&&(nx>=0&&nx<n&&ny>=0&&ny<m))
            {
                char ch=mp[nx][ny];
                mp[nx][ny]='#';
                if(mp[x+dir[i][0]/2][y+dir[i][1]/2]=='#')return;
                double nnum=cal(num,ch-'0',mp[x+dir[i][0]/2][y+dir[i][1]/2]);
                if(fabs(tar-nnum)<=1e-8)
                {
                    flag=true;
                    return;
                }
                dfs(nx,ny,nnum);
                mp[nx][ny]=ch;
            }
        }
        return;
    }
    int main()
    {
    #ifdef LOCAL
        freopen("in.txt", "r", stdin);
    #endif // LOCAL
        //Start
        int N;
        cin>>N;
        while(N--)
        {
            cin>>n>>m>>tar;
            ms(mp);
            flag=false;
            for(int i=0; i<n; i++)
            {
                cin>>mp[i];
            }
            for(int i=0; i<n; i++)
            {
                for(int j=0; j<m; j++)
                {
                    if(isdigit(mp[i][j]))
                    {
                        char sav=mp[i][j];
                        if((sav-'0')==tar)
                        {
                            flag=true;
                            break;
                        }
                        mp[i][j]='#';
                        dfs(i,j,sav-'0');
                        mp[i][j]=sav;
                    }
                    if(flag)break;
                }
                if(flag)break;
            }
            if(flag)printf("Possible
    ");
            else printf("Impossible
    ");
        }
        return 0;
    }
  • 相关阅读:
    Python_02
    iOS架构模式浅析
    Swift学习目录
    Flutter基础系列之混合开发(二)
    iOS性能优化
    Flutter基础系列之入门(一)
    iOS应用卡顿分析
    Weex是如何让JS调用产生原生UIView的?
    WeexSDK之注册Modules
    WeexSDK之注册Handlers
  • 原文地址:https://www.cnblogs.com/gpsx/p/5166106.html
Copyright © 2020-2023  润新知