Crossword Answers

Crossword Answers

Think:
题目大意是一个棋盘里有黑色和白色的白块,如果一个白色的白块的左边或者上边是黑色的或者是边界,则白块被标记,序号从左到右,从上到下,依次增大。
然后遍历,遇到序号,把序号和这个白块到边界或者黑块之间的字符输出。遍历是先横后纵。
%%%注意,这题的坑点是:(第一组除外)每一组的前面都有一个空白行(遇到了PE,竟不知道哪里错了,找了好久……)!!!

#include 
using namespace std;
char a[121][121];//存字符
int b[121][121];//存序号
int c[121][121];//是否访问过
int main()
{
   int n, m;
   int t = 1;
   while(~scanf("%d", &n)&&n)
   {
   scanf("%d", &m);
   getchar();
      for(int i=1;i<=n;i++)
      {
        for(int j=1;j<=m;j++)
        {
            scanf("%c", &a[i][j]);
            b[i][j] = 0;
            c[i][j] = 0;
        }
        getchar();
      }
      int top = 1;
      for(int i=1;i<=n;i++)
      {
         for(int j=1;j<=m;j++)
         {
            if((i==1||j==1)&&a[i][j]!='*')
            {
              b[i][j] = top++;
            }
            else if((a[i-1][j]=='*'||a[i][j-1]=='*')&&a[i][j]!='*')
            {
              b[i][j] = top++;
            }
         }
      }
      if(t!=1)
      cout<cout<<"puzzle #"<':'<cout<<"Across"<for(int i=1;i<=n;i++)
      {
          for(int j=1;j<=m;j++)
          {
            if(b[i][j]!=0)
            {
              printf("%3d.", b[i][j]);
              for(;j<=m;j++)
              {
                if(a[i][j]=='*')
                break;
                else
                cout<cout<cout<<"Down"<for(int i=1;i<=n;i++)
      {
        for(int j=1;j<=m;j++)
        {
          if(b[i][j]!=0&&c[i][j]==0)
          {
            printf("%3d.", b[i][j]);
            int k = i;
            for(;k<=n;k++)
            {
              if(a[k][j]=='*')
              break;
              else
              {
              if(c[k][j]==0)
              {
               c[k][j] = 1;
               cout<cout<return 0;
}

你可能感兴趣的:(Crossword Answers)