zoukankan      html  css  js  c++  java
  • POJ 3561 Pseudographical recognizer

    【题意简述】:矩阵中除了‘.’仅仅能出现一种符号。是这些之中的一个‘‑’, ‘|’, ‘’, or ‘/’,并且就是当除了‘.’之外还仅仅有一种符号时。这个符号还必须连成一条直线,否则就是错的,这个时候就能够输出CORRECT。否则当有两种以上符号的时候。就是错误。

    还有就是当仅仅有‘.’时,也是不正确的。

    【分析】:模拟过程,将整个思路想清晰。

    本代码參考:http://www.cnblogs.com/gongling/archive/2012/08/05/2623676.html。

    // 208K 125ms
    #include<cstdio>
    #include<iostream>
    using namespace std;
    #define MAX_LEN 101
    #define is_valid(x, y) ((x)>=0 && (x)<N && (y)>=0 && (y)<M)
    int N, M;
    char image[MAX_LEN][MAX_LEN];
    int visited[MAX_LEN][MAX_LEN];
    int flag;
    
    void mark(int i, int j, int dx, int dy, char ch)
    {
        while(is_valid(i+dx, j+dy) && image[i+dx][j+dy]==ch)
        {
            visited[i+dx][j+dy] = 1;
            i += dx;
            j += dy;
        }
    }
    
    void solve()
    {
        int i, j;
        char ch;
        for(i=0; i<N; i++)
        {
            for(j=0; j<M; j++)
            {
                ch = image[i][j];
                if(ch!='.' && !visited[i][j])
                {
                    visited[i][j] = 1;
                    switch(ch)
                    {
                    case '-':
                        ++flag;
                        mark(i, j, 0, 1, ch);
                        break;
                    case '|':
                        ++flag;
                        mark(i, j, 1, 0, ch);
                        break;
                    case '\':
                        ++flag;
                        mark(i, j, 1, 1, ch);
                        break;
                    case '/':
                        ++flag;
                        mark(i, j, 1, -1, ch);
                        break;
                    }
                }
            }
        }
    }
    
    int main()
    {
        int i, tests;
        scanf("%d", &tests);
        while(tests--)
        {
            scanf("%d %d", &N, &M);
            for(i=0; i<N; i++)
                scanf("%s", image[i]);
            memset(visited, 0, sizeof(visited));
            flag = 0;
            solve();
            if(flag == 1)
                printf("CORRECT
    ");
            else
                printf("INCORRECT
    ");
        }
    }


  • 相关阅读:
    JSP
    token防止表单重复提交
    web应用程序性能优化
    js 优化
    文本查看及处理工具简单命令
    DNS之一---DNS服务及BIND服务,并实现DNS正向与反向解析
    企业级自动化运维工具应用实战ansible
    Linux小试牛刀
    Linux特殊权限及ACL权限
    文件的默认权限UMASK
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7262069.html
Copyright © 2011-2022 走看看