算法竞赛入门经典第二版的 纵横之谜的答案 uva 232

uva 232  
填字游戏是由一个矩形网格的黑色和白色的正方形和两列defi定义(或说明)。一个列表的fi定义是“词”是写左在排在白方块权和其他列表的话被写下来的白色正方形的柱子。(总之是一个序列的字母。)解决字谜游戏,一个写在网格中的白色方块去fi定义相应的单词。德fi定义对应的矩形网格的连续整数意味着“合格”的白色方块。左边或以上的白色方块,立即向左或以上,白色正方形,没有任何一方立即向左或以上,也有“资格”,没有其他广场被编号。所有的广场上fi第一行的编号。编号从1开始,一直连续在fi一排白色的方块,然后在第二排有白色的方块,然后在第三行的合资格的白方块等等所有的拼图行休息。下面的图片显示了一个矩形的纵横字谜网格与相应的编号。“在”阿德fi定义字写在白色方块序列一行开始一个编号方不遵循同一行中的另一个白色的方。那字穿过广场的数排白色正方形序列,结束之前立即行中的下一个黑色正方形或在最右边的列方。“下来”的阿德fi定义词写在一列从一个平方,不遵循同一列中的另一个白色的平方序列的白色方块。白色方块的序列,这个词的列的编号广场,结束前的下一个黑色方块中的列或在底部的列。每一个正确解的白色方块包含一个字母。你必须写一个程序,需要几个解决字谜游戏输入和输出的列表在下句构成的解决方案


题目。。。。。。。。

用数字数组操作   和  记忆是否是否被操作过


#include<stdio.h>
#include<string.h>
char ch[12][12]={'\0'};
int b[12][12]={0};//记忆数字
int main()
{
 int y[12][12]={0};//记忆是否被打印过
 int m,n,i,j,k,count=0;
 while(scanf("%d",&m)==1 && m!=0){//检测第一个数是否为0;
 scanf("%d ",&n);
 for(i=1;i<m+1;i++)
 {
  for(j=1;j<n+1;j++)
  {
   ch[i][j]=getchar();
   if(ch[i][j]=='0')
    return 0;
   if((ch[i][j-1]=='\0' || ch[i][j-1]=='*' || ch[i-1][j]=='\0' || ch[i-1][j]=='*') && ch[i][j]!='*')
   {
    count++;
    b[i][j]=count;
   }
  }
  getchar();
 }
 printf("Across\n");//横向的比较容易
 for(i=1;i<m+1;i++)
 {
  for(j=1;j<n+1;j++)
  {
         if(b[i][j] && y[i][j]==0)
   {
    printf("%d.",b[i][j]);
    while(ch[i][j]!='*' && j<n+1)
    {
     y[i][j]=1;
     printf("%c",ch[i][j]);
     j++;
    }
    printf("\n");
   }
  }
 }
 printf("Down;\n");//这个就比较难处理一点
 memset(y,0,sizeof(y));
   for(i=1;i<m+1;i++)
 { 
     for(j=1;j<n+1;j++)
  {
   if(b[i][j] && y[i][j]==0)//看这个数是否被操作过;
   {
    printf("%d.",b[i][j]);
    k=i;
    while(ch[k][j]!='*' && k<m+1)
    {
     y[k][j]=1;
     printf("%c",ch[k][j]);
     k++;
    }
    printf("\n");
   }

  }
  
 }
 }
return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值