UVa232 Crossword Answers

#include<stdio.h>
#include<string.h>
#include<iostream>

using namespace std;
char s[11][11];
int num[11][11];
int vis[11][11];
int main()
{
    int r,c;
    int t=0;
    while(scanf("%d",&r)!=EOF)
    {
        if(r==0)
            break;

        t++;      //计数变量 
        
        scanf("%d",&c);
        
        for(int i=0;i<r;i++)
        {
            scanf("%s",s[i]);
        }
        //编号;
        memset(num,0,sizeof(num));
        memset(vis,0,sizeof(vis));
        
        int t1=0;
        for(int i=0;i<r;i++)
        {
            for(int j=0;j<c;j++)
            {
                if(s[i][j] != '*')
                {
                    if(i==0)
                    {
                        num[i][j] = ++t1;
                    }
                    else if(j==0)
                    {
                        num[i][j] = ++t1;
                    }
                    else if(s[i][j-1] =='*' || s[i-1][j] == '*')
                    {
                        num[i][j] = ++t1;
                    }

                }
            }
        }

        //输出;
        if(t != 1)
            printf("\n");

        printf("puzzle #%d:\n",t);
        printf("Across\n");
        int flag=0;
        int cnt1=0;
        int flag1=1;
        for(int i=0;i<r;i++)
        {
            for(int j=0;j<c;j++)
            {
                if(s[i][j]=='*' && flag)
                {
                    flag=0;
                    printf("\n");
                }
                if(s[i][j] != '*')
                {
                    if(num[i][j] != 0)
                    {
                        if(i==0 && num[i][j-1]==0)
                            printf("%3d.",num[i][j]);
                        else if(i != 0 && (j==0 || s[i][j-1] == '*'))
                            printf("%3d.",num[i][j]);
                    }
                    if(j == c-1)
                    {
                        printf("%c\n",s[i][j]);
                        flag=0;
                    }
                    else
                    {
                        printf("%c",s[i][j]);
                        flag=1;
                    }
                }
            }
        }
        printf("Down\n");
        for(int i=0;i<r;i++)
        {
            for(int j=0;j<c;j++)
            {
                if(num[i][j]!=0)
                {
                    if(i==0)
                        printf("%3d.",num[i][j]);
                    else if(s[i-1][j]=='*')
                        printf("%3d.",num[i][j]);

                }
                if(s[i][j] != '*' && !vis[i][j])
                {
                    for(int k=i; s[k][j]!='*' && k<r; k++)
                    {
                        vis[k][j] = 1;
                        printf("%c", s[k][j]);
                    }
                    printf("\n");
                }
            }
        }
    }
    return 0;
}


你可能感兴趣的:(uva)