Uva--784 (DFS)

2014-07-05 21:17:02

题意&思路:简单的DFS填图。这题卡住我的倒不是DFS本身,而是输入的问题。事实证明gets(str) 和 fgets(str,len,stdin)均可行,注意要吃掉首个Case数字后面的回车'\n'

 

 1 #include <stdio.h>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 char g[105][105];
 8 
 9 void Dfs(int x,int y){
10     if(g[x][y] != ' ' && g[x][y] != '*')
11         return;
12     g[x][y] = '#';
13     Dfs(x - 1,y);
14     Dfs(x + 1,y);
15     Dfs(x,y - 1);
16     Dfs(x,y + 1);
17 }
18 
19 int main(){
20     char str[105];
21     int Case,row,x,y;
22     scanf("%d",&Case);
23     getchar();
24     while(Case--){
25         memset(g,0,sizeof(g));
26         row = 0;
27         while(fgets(str,105,stdin)){
28             int len = strlen(str);
29             if(str[0] == '_')
30                 break;
31             for(int j = 0; j < len; ++j){
32                 g[row][j] = str[j];
33                 if(str[j] == '*'){
34                     x = row;
35                     y = j;
36                 }
37             }
38             ++row; //行数
39         }
40         Dfs(x,y);
41         //因为fgets是以'\n'为结尾的,所以g[i],str的结尾实际上都有回车符
42         for(int i = 0; i < row; ++i){
43             printf("%s",g[i]);
44         }
45         printf("%s",str);
46     }
47     return 0;
48 }

 

 

 

转载于:https://www.cnblogs.com/naturepengchen/articles/3826432.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值