acm第一弹

作为非计算机专业的码农,不知道大三了才搞acm算不算晚额

那啥做的是POJ 2386

主要一开始就是代码风格太乱c c++都有混在一起了= =

然后scanf这玩意貌似有bug啊 需要用fflush(stdin)来清缓存

然后ubuntu下面apt-get install 下的gcc貌似不是最新版的还不支持fflush T T

然后就特么来一发纯c++ 用c++方式编译

还有函数中定义了char** 难道不能传一个二维数组名作为指针穿进去吗 很拙计啊= =

还有最纠结的就是特么那个表示水池的字符竟然是'W' 不是'w' 浪费了好多时间额 哎 第一次搞没有经验额

然后就是发现自己c++功力还是不够额,乱七八糟的东西搞了一堆还是要回到根本上来啊

还有scheme貌似是个不错的东西,明天去借本书来修炼修炼内功,期末考试什么的就全看造化了= =

代码如下     

#include <iostream>
using namespace std;

const int MAX_N = 100+10;
const int MAX_M = 100+10;
static int counter = 0;
char field[MAX_N][MAX_M];

void dfs(int x, int y, int n, int m){
	field[x][y] = '.';

	for(int dx=-1; dx<=1; dx++){
		for(int dy=-1; dy<=1; dy++){
			int nx = x+dx;
			int ny = y+dy;
			if(nx>=0 && nx<n && ny>=0 && ny<m){
				if(field[nx][ny]=='W'){
					dfs(nx, ny, n, m);
				}
			}
		}
	}

	return;

}

void solve(int n, int m){
	for(int i=0; i<n; i++){
		for(int j=0; j<m; j++){
			if(field[i][j] == 'W'){
				dfs(i, j, n, m);
				counter++;
			}

		}
	}
}

int main(void)
{
	char flag;
	int n, m;
	cin>>n>>m;

	for(int i=0; i<n; i++){
		for(int j=0; j<m; j++){
			cin>>flag;
			field[i][j] = flag;
		}
	}
	
	solve(n, m);
	int output = counter;
	cout<<output<<endl;

 	//system("pause");
	return 0;
}


你可能感兴趣的:(acm第一弹)