UVa 232 Crossword Answers

这道题难道是不难,细节太多了,撸了一百多行,PE?还好及时发现。。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
using namespace std;
struct node
{
    int nu;
    char c[15];
}b[205];
bool cmp(node a, node b)
{
    return a.nu < b.nu;
}
int main()
{
    char a[15][15];
    int num[15][15];
    int m, n;
    int cas = 0;
    while(scanf("%d",&n) != EOF)
    {

        if(n == 0) break;
        scanf("%d",&m);
        memset(num, 0, sizeof(num));
        if(cas) printf("\n");
        printf("puzzle #%d:\n",++cas);
        for(int i = 0; i < n; i ++)
            for(int j = 0; j < m; j ++)
            cin>>a[i][j];

        int cnt = 0;
        for(int i = 0; i < n; i ++)
            for(int j = 0; j < m; j ++)
        {
            if((i == 0 || j == 0 || a[i][j-1] == '*' || a[i-1][j] == '*' )&& a[i][j] != '*')
                num[i][j] = ++ cnt;
        }
//        for(int i = 0; i < n; i ++)
//        {
//            for(int j = 0; j < m; j ++)
//            {
//                cout<<num[i][j]<<' ';
//            }
//            cout<<endl;
//        }
        printf("Across\n");
        for(int i = 0; i < n; i ++)
        {
            int first = 1;
            for(int j = 0; j < m; j ++)
            {
                if(num[i][j] != 0)
                {
                    if(first && a[i][j] != '*'){
                        printf("%3d.",num[i][j]);
                        first = 0;
                    }
                    bool pr = 0;
                    while(a[i][j] != '*' && j < m)
                    {
                        pr = 1;
                        printf("%c",a[i][j]);
                        j ++;
                    }
                    if(pr)
                    printf("\n");
                    if(a[i][j] == '*')
                    {
                        first = 1;
                        continue;
                    }
                    //printf("%c",a[i][j]);
                }
            }
        }
        int kk = 0;
        printf("Down\n");
        for(int j = 0; j < m; j ++)
        {
            int first = 1;
            for(int i = 0; i < n; i ++)
            {
                if(num[i][j] != 0)
                {
                    if(first && a[i][j] != '*'){
                        //printf("  %d.",num[i][j]);
                        b[++kk].nu = num[i][j];
                        first = 0;
                    }
                    int kkk = 0;
                    while(a[i][j] != '*' && i < n)
                    {
                        //printf("%c",a[i][j]);
                        b[kk].c[kkk ++] = a[i][j];
                        i ++;
                    }
                    b[kk].c[kkk] = '\0';
                    if(a[i][j] == '*')
                    {
                        first = 1;
                        continue;
                    }
                    //printf("%c",a[i][j]);
                }
            }
        }
        sort(b + 1, b + 1 + kk, cmp);
        for(int i = 1; i <= kk; i ++)
        {
            printf("%3d.%s\n",b[i].nu, b[i].c);
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_41444888/article/details/80585930