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 }

 

 

 

posted @ 2014-07-05 21:19  Naturain  阅读(123)  评论(0编辑  收藏  举报