P1101 单词方阵

题目描述
给一nXn的字母方阵,内可能蕴含多个“yizhong”单词。单词在方阵中是沿着同一方向连续摆放的。摆放可沿着8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间[color=red]可以[/color]交叉,因此有可能共用字母。输出时,将不是单词的字母用“*”代替,以突出显示单词。例如:


输入:
    8                     输出:
    qyizhong              *yizhong
    gydthkjy              gy******
    nwidghji              n*i*****
    orbzsfgz              o**z****
    hhgrhwth              h***h***
    zzzzzozo              z****o**
    iwdfrgng              i*****n*
    yyyygggg              y******g
输入输出格式
输入格式:
第一行输入一个数n。(7<=n<=100)。


第二行开始输入nXn的字母矩阵。


输出格式:
突出显示单词的nXn矩阵。


输入输出样例
输入样例#1: 
7
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
aaaaaaa
输出样例#1: 
*******
*******
*******
*******
*******
*******

*******


#include<stdio.h>
int n,p,q;
int flag;
int book[105][105];
char arr[7] = {'y','i','z','h','o','n','g'};
char arra[105][105];
int x[8] = {-1,-1,-1,0,0,1,1,1};
int y[8] = {-1,0,1,-1,1,-1,0,1};

void dfs(int deep,int tends){
	if(deep >= 6){
		flag = 1;
		return ;
	}

	if(p+x[tends]*(deep+1)>=0&&p+x[tends]*(deep+1)<n&&q+y[tends]*(deep+1)>=0&&q+y[tends]*(deep+1)<n 
	&& arra[p+x[tends]*(deep+1)][q+y[tends]*(deep+1)] == arr[deep+1]){
		if(book[p+x[tends]*(deep+1)][q+y[tends]*(deep+1)] == 1){
			dfs(deep+1,tends);
		}else{
			book[p+x[tends]*(deep+1)][q+y[tends]*(deep+1)] = 1;
			dfs(deep+1,tends);
			if(flag == 0){
			book[p+x[tends]*(deep+1)][q+y[tends]*(deep+1)] = 0;
		}
		}
		
		
		
	}
	

}

int main(){
	scanf("%d",&n);
	for(int i = 0;i < n;i ++){
		scanf("%s",arra[i]);
	}
	
	for(int i = 0;i < n;i ++){
		for(int j = 0;j < n;j ++){
			if(arra[i][j] == 'y'){
				p = i;
				q = j;
				
				for(int k = 0;k < 8;k ++){
					flag = 0;
					dfs(0,k);
					if(flag){
						book[p][q] = 1;
					}
				}
				
			}
		}
	}
	for(int i = 0;i < n;i ++){
		for(int j = 0;j < n;j ++){
			if(book[i][j]){
				printf("%c",arra[i][j]);
			}else{
				printf("*");
			}
		}
		printf("\n");
		
	}
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值