百度笔试3.16

#include <map>  
#include <cmath>  
#include <queue>  
#include <cstdio>  
#include <string>  
#include <cstring>  
#include <iostream>  
#include <algorithm> 
#include <sstream> 
#include <time.h> 
#include <vector>
#include <list>
#include <deque>
#include <unordered_map>
#include <unordered_set>

using namespace std;


bool flag[1001][1001] = { 0 };
int dir_x[4] = { -1,0,0,1 };
int dir_y[4] = { 0,1,-1,0 };

void find_res(vector<vector<int>>&data,int x,int y) {
	for (int i = 0; i < 4; i++)
	{
		int xx = x + dir_x[i];
		int yy = y + dir_y[i];
		//cout << xx <<" y= "<<yy<<endl;
		if (xx >= 0 && xx < data.size() &&  yy >= 0 && yy < data.size()
			&& flag[xx][yy] == 0 && data[x][y]==0)
		{
			flag[xx][yy] = 1;
			//cout << xx << " y= " << yy << endl;
			find_res(data, xx, yy);
		}
	}
}

int main()
{
	string S;
	int N;

	cin >> N;
	vector< vector<int>>data(N, vector<int>(N));
	for (int i = 0; i < N; ++i) {
		for (int j = 0; j < N; ++j) {
			cin >> data[i][j];
		}
	}
	for (int i = 0; i < N; ++i) {
		int j = 0;
		if (data[j][i] == 0 && flag[j][i] == 0) {
			flag[i][j] = 1;
			find_res(data, j, i);
		}
		if (data[i][j] == 0 && flag[i][j] == 0) {
			flag[i][j] = 1;
			find_res(data, i, j);
		}
		j = N - 1;
		if (data[i][j] == 0 && flag[i][j] == 0) {
			flag[i][j] = 1;
			find_res(data, i, j);
		}
		if (data[j][i] == 0 && flag[j][i] == 0) {
			flag[i][j] = 1;
			find_res(data, j, i);
		}
	}
	for (int i = 0; i < N; ++i) {
		for (int j = 0; j < N; ++j) {
			cout << (data[i][j] || flag[i][j] == 0) << ' ';
		}
		cout << endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Yanpr919/article/details/114915493