uva 232 - Crossword Answers

代码又是挺乱的,时间太紧没空整理,思路也不好~但能AC……

看不清楚可以留言,或者加qq一起探讨微笑

#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;
                    }

                }
            }
        }

//        for(int i=0;i<r;i++)
//        {
//            for(int j=0;j<c;j++)
//            {
//                printf("%d",num[i][j]);
//            }
//            printf("\n");
//        }
        //输出;
        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)