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 }