• c语言 纵横字谜的答案


    //问题:纵横字谜的答案 输入一个r行c列(1=<r,c<=10),的网格,黑格用*号表示,每个白格都天线一个字母.如果一个白格的左边相邻位置或者上边相邻的位置没有白格(可能是黑格,可能是边界),则称这个白格是一个起始格
    //每一次输出必须从初始格 开始 到'*'或者边界结束
    //解题思路:二维数组 标记
    #include<stdio.h>
    #include<string.h>
    int main(){
        //定义表格
        char puzzle[10][10];
        //定义标记
        int mark[10][10];
        //换行标记
        int ct=0;
        //行 列
        int m,n;
        //输入m 并判断其是否正确输入
        while(scanf("%d",&m)==1){
            if(m==0)break;
            //置零
            memset(mark,0,sizeof(mark));
            //输入n
            scanf("%d",&n);
            int i=0;
            //初始化网格
            while(i<m)
                scanf("%s",puzzle[i++]);
            int j,p=1;
            //遍历 并标记
            for(int i=0;i<m;i++){
                for(j=0;j<n;j++){
                    //若是'*' 跳出循环 继续循环
                    if(puzzle[i][j]=='*')continue;
                    //标记初始格
                    if(i==0||j==0)mark[i][j]=p++;
                    else if(puzzle[i-1][j]=='*'||puzzle[i][j-1]=='*')mark[i][j]=p++;
                }
            }
            if(ct)printf(" ");
            printf("puzzle #%d: ",++ct);
            printf("Across ");
            //遍历输出
            for(int i=0;i<m;i++){
                for(int j=0;j<n;j++){
                    //初始格
                    if(mark[i][j]>0){
                        printf("%3d.",mark[i][j]);
                        //初始格后 一直输出 直到'*'
                        while(j<n&&puzzle[i][j]!='*'){
                            putchar(puzzle[i][j++]);
                        }
                        //换行
                        printf(" ");
                    }
                }

            }

            printf("Down ");
            for(int j=0;j<n;j++){
                for(int i=0;i<m;i++){
                    //初始格
                    if(mark[i][j]>0){
                        printf("%3d.",mark[i][j]);
                        //初始格后 一直输出 直到'*'
                        while(i<m&&puzzle[i][j]!='*'){
                            putchar(puzzle[i++][j]);
                        }
                        //换行
                        printf(" ");
                    }
                }

            }
        }
        return 0;
    }

  • 相关阅读:
    linux自动清理30天之前的文件
    Oracle树查询及相关函数
    jackson循环引用导致序列化stackOverFlow的解决
    java核心技术36讲笔记
    Quartz学习
    Quartz学习
    java核心技术36讲
    git常用命令
    CTCall简介(后续会继续补充)
    自定义导航栏,隐藏导航栏底部的灰色线条
  • 原文地址:https://www.cnblogs.com/qingtianBKY/p/6613239.html
Copyright © 2020-2023  润新知