zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    POJ 1182 食物链(带权并查集)
    UVa 10655 n次方之和(矩阵快速幂)
    2016湘潭邀请赛—Heartstone
    2016湘潭邀请赛—Gambling
    UVa 10375 选择与除法(唯一分解定理)
    UVa 1637 纸牌游戏(全概率公式)
    POJ 2443 Set Operation(压位加速)
    UVa 11248 网络扩容(最大流(需要优化))
    51Nod 1737 配对(树的重心)
    51Nod 1070 Bash游戏 V4(斐波那契博弈)
  • 原文地址:https://www.cnblogs.com/qingtianBKY/p/6613239.html
Copyright © 2011-2022 走看看