Uva 232-crossword answers

我的思路是网格的四周全部置为'*',设置sign数组记录起始格

#include <stdio.h> #include <cstring> char a[20][20]; int sign[20][20]; int n = 1; int main() { int r, c, cnt, yes, first = 1; while(scanf("%d",&r)==1) { memset(sign,0,sizeof(sign)); cnt = 1; yes = 0; if(r == 0) break; scanf("%d",&c); getchar(); for(int i = 1; i <= r; i ++) { for(int j = 1; j <= c; j ++) {scanf("%c",&a[i][j]);} getchar(); } for(int i = 0; i <= r+1; i ++) a[i][0] = a[i][c+1] = '*'; for(int j = 0; j <= c+1; j++) a[0][j] = a[r+1][j] = '*'; for(int i = 1; i <= r; i++) for(int j = 1; j <= c; j++) if((a[i-1][j] == '*' || a[i][j-1] == '*')&&a[i][j] !='*') sign[i][j] = cnt ++; if(!first) printf("\n"); first = 0; printf("puzzle #%d:\nAcross\n",n); for(int i = 1; i <= r; i ++) for(int j = 1; j <= c; j ++) { if(sign[i][j]) printf("%3d.",sign[i][j]); while(a[i][j] != '*') { printf("%c",a[i][j]); j ++; yes = 1; } if(yes) { printf("\n"); yes = 0; } } printf("Down\n"); for(int i = 1; i <= r; i ++) for(int j = 1; j <= c; j ++) { int m = i; if(sign[i][j]) printf("%3d.",sign[i][j]); while(a[i][j] != '*') { printf("%c",a[i][j]); a[i][j] = '*'; sign[i][j] = 0; yes = 1; i ++; } if(yes) { printf("\n"); yes = 0; } i = m; } n++; } return 0; }

 

转载于:https://www.cnblogs.com/ekinzhang/p/4300520.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值