2019 GDUT Winter Personal Training Contest I (Div. 2) A. Protect Sheep

2019 GDUT Winter Personal Training Contest I (Div. 2) A. Protect Sheep 题目见 :
http://codeforces.com/group/NVaJtLaLjS/contest/236426/problem/A
题目大意: 一个长宽分别为R,C(<=500)的长方形,里面有字符 s ——羊,w ——狼,. ——空地,你可以在空地放上任意数量狗,使得狼上下左右走无法到达羊吗?打出一种方案。
思路: 【2019 GDUT Winter Personal Training Contest I (Div. 2) A. Protect Sheep】对于一种成功的方案,用狼作为起点进行dfs,判断能否到达羊。
一次优化: 题目没限制狗的数量,那就不妨把所有空地全部放上狗,这样狼就只能被堵在原地,这样只需判断狼的四周有没有羊即可。
实现:

#include #includeintmain() {int n,r,c,k,t,i,j,p; char s[550][550]; scanf("%d %d",&r,&c); for (i=1; i<=r; i++) { scanf("%s",&s[i]); for (j=c; j>=1; j--) s[i][j]=s[i][j-1]; } for (i=0; i<=r+1; i++) { s[i][0]='.'; s[i][c+1]='.'; }for (j=0; j<=c+1; j++) { s[0][j]='.'; s[r+1][j]='.'; } p=0; for (i=1; i<=r; i++) for (j=1; j<=c; j++) if (s[i][j]=='S'&&(s[i][j-1]=='W'||s[i][j+1]=='W'||s[i-1][j]=='W'||s[i+1][j]=='W')) p=1; if (p==1) printf("No\n"); else { printf("Yes\n"); for (i=1; i<=r; i++) { for (j=1; j<=c; j++) if (s[i][j]=='.') printf("D"); else printf("%c",s[i][j]); printf("\n"); } } return 0; }

    推荐阅读