View Code of Problem 17

#include<iostream>
#include<cstring>
#include<vector>
using namespace std;
void dfs(vector<vector<int>> a,vector<vector<char>>& flag,int i,int j,int& cnt)
{
	int q = a.size(), w = a[0].size();
	flag[i][j] = true;
	cnt ++;
	if(i-1>=0 && !flag[i-1][j] && a[i-1][j] - a[i][j] == 1) dfs(a,flag,i-1,j,cnt);
	if(i+1<q && !flag[i+1][j] && a[i+1][j] - a[i][j] == 1) dfs(a,flag,i+1,j,cnt);
	if(j-1>=0 && !flag[i][j-1] && a[i][j-1] - a[i][j] == 1) dfs(a,flag,i,j-1,cnt);
	if(j+1<w && !flag[i][j+1] && a[i][j+1] - a[i][j] == 1) dfs(a,flag,i,j+1,cnt);
}
void refresh(vector<vector<char>>& flag)
{
	int q = flag.size(), w = flag[0].size();
	for(int i = 0;i < q;i ++)
	{
		for(int j = 0;j < w;j ++)
		{
			flag[i][j] = false;
		}
	}
}
int main()
{
	int n, m;
	while(cin >> n >> m)
	{
		vector<vector<int>> a(n,vector<int>(m));
		vector<vector<char>> flag(n,vector<char>(m));
		
		for(int i = 0;i < n;i ++)
		{
			for(int j = 0;j < m;j ++)
			{
				cin >> a[i][j];
				flag[i][j] = false;
			}
		}
		int cnt = 0, res = 0;
		for(int i = 0;i < n;i ++)
		{
			for(int j = 0;j < m;j ++)
			{
				dfs(a,flag,i,j,cnt);
				res = max(cnt-1,res);
				cnt = 0;
				refresh(flag);
			}
		}
		cout << res << endl;
	}
}

Double click to view unformatted code.


Back to problem 17