POJ 1164

這道題的題目敘述着實唬人,感覺太多無關信息了

不過說來慚愧,偷了個小懶去看了下別人怎麼翻譯的,這部分小痛苦直接跳過了

簡單DFS應用

#include <iostream>
#include <algorithm>
#include <queue>
#include <string>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <stack>
#include <map>
#include <set>
using namespace std;

const int maxn= 55;

int m, n;
int cas[maxn][maxn];
bool vis[maxn][maxn];
int step[4][2]= {{0, -1}, {-1, 0}, {0, 1}, {1, 0}};

int DFS(int x, int y)
{
	if (x< 1 || x> m || y< 1 || y>n){
		return 0;
	}
	int ret= 1;

	for (int i= 0; i< 4; ++i){
		if (cas[x][y] & (1<<i)){
			continue;
		}
		int nx= x+step[i][0], ny= y+step[i][1];
		if (!vis[nx][ny]){
			vis[nx][ny]= 1;
			ret+= DFS(x+step[i][0], y+step[i][1]);
		}
	}

	return ret;
}
int main(int argc, char const *argv[])
{
	scanf("%d %d", &m, &n);
	for (int i= 1; i<= m; ++i){
		for (int j= 1; j<= n; ++j){
			scanf("%d", cas[i]+j);
		}
	}

	int ans=0, mx= 0;
	memset(vis, 0, sizeof(vis));
	for (int i= 1; i<= m; ++i){
		for (int j= 1; j<= n; ++j){
			if (!vis[i][j]){
				++ans;
				vis[i][j]= 1;
				mx= max(mx, DFS(i, j));
			}
		}
	}

	printf("%d\n%d\n", ans, mx);

	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章