标签:
/*ID: awsd1231PROG: castleLANG: C++*/#include<iostream>#include<cstdio>#include<vector>#include<algorithm>using namespace std;struct T {int color;int value;T() : color(0) {}//初始化每个color为0}cas[50][50];int m, n;int c[2501] = {0};//统计每种颜色个数struct T2 {int s, x, y, turn;//turn 0down 1right}tmp;vector<T2> ans;bool operator < (T2 a, T2 b) {if(a.x != b.x) return a.x < b.x;if(a.y != b.y)return a.y > b.y;return a.turn < b.turn;}void floodFill(int x, int y, int color) {++c[color];cas[y][x].color = color;switch (cas[y][x].value) {case 14 : if (!cas[y][x - 1].color) //leftfloodFill(x - 1, y, color);break;case 13 : if (!cas[y - 1][x].color) //upfloodFill(x, y - 1, color);break;case 12 : if (!cas[y][x - 1].color) //leftfloodFill(x - 1, y, color);if (!cas[y - 1][x].color) //upfloodFill(x, y - 1, color);break;case 11 : if (!cas[y][x + 1].color) // rightfloodFill(x + 1, y, color);break;case 10 : if (!cas[y][x - 1].color) // leftfloodFill(x - 1, y, color);if (!cas[y][x + 1].color) // rightfloodFill(x + 1, y, color);break;case 9 : if (!cas[y][x + 1].color) // rightfloodFill(x + 1, y, color);if (!cas[y - 1][x].color) // upfloodFill(x, y - 1, color);break;case 8 : if (!cas[y][x - 1].color) // leftfloodFill(x - 1, y, color);if (!cas[y][x + 1].color) // rightfloodFill(x + 1, y, color);if (!cas[y - 1][x].color) // upfloodFill(x, y - 1, color);break;case 7 : if (!cas[y + 1][x].color) // downfloodFill(x, y + 1, color);break;case 6 : if (!cas[y][x - 1].color)// leftfloodFill(x - 1, y, color);if (!cas[y + 1][x].color)//downfloodFill(x, y + 1, color);break;case 5 : if (!cas[y - 1][x].color) // upfloodFill(x, y - 1, color);if (!cas[y + 1][x].color) // downfloodFill(x, y + 1, color);break;case 4 : if (!cas[y][x - 1].color) // leftfloodFill(x - 1, y, color);if (!cas[y - 1][x].color) // upfloodFill(x, y - 1, color);if (!cas[y + 1][x].color) // downfloodFill(x, y + 1, color);break;case 3 : if (!cas[y][x + 1].color) // rightfloodFill(x + 1, y, color);if (!cas[y + 1][x].color) // downfloodFill(x, y + 1, color);break;case 2 : if (!cas[y][x + 1].color) // rightfloodFill(x + 1, y, color);if (!cas[y][x - 1].color) // leftfloodFill(x - 1, y, color);if (!cas[y + 1][x].color) // downfloodFill(x, y + 1, color);break;case 1 : if (!cas[y][x + 1].color) // rightfloodFill(x + 1, y, color);if (!cas[y + 1][x].color) // downfloodFill(x, y + 1, color);if (!cas[y - 1][x].color) // upfloodFill(x, y - 1, color);break;case 0 : if (!cas[y][x + 1].color) // rightfloodFill(x + 1, y, color);if (!cas[y][x - 1].color) // leftfloodFill(x - 1, y, color);if (!cas[y + 1][x].color) // downfloodFill(x, y + 1, color);if (!cas[y - 1][x].color) // upfloodFill(x, y - 1, color);break;}}int main() {freopen("castle.in", "r", stdin);freopen("castle.out", "w", stdout);scanf("%d%d", &m, &n);for (int i = 0; i != n; ++i) {for (int j = 0; j != m; ++j) {scanf("%d", &cas[i][j].value);}}int co(0);//赋颜色cofor (int i = 0; i != n; ++i) {for (int j = 0; j != m; ++j) {if (cas[i][j].color == 0)floodFill(j, i, ++co);}}int maxS(0);for (int i = 0; i != co; ++i) {if(maxS < c[i + 1]) maxS = c[i + 1];}cout << co << endl << maxS << endl;tmp.s = tmp.x = tmp.y = tmp.turn = -1;ans.push_back(tmp);//初始化,让ans不为空for (int i = 0; i != n; ++i) {for (int j = 0; j != m - 1; ++j) {if (cas[i][j].color != cas[i][j + 1].color) {int S = c[cas[i][j].color] + c[cas[i][j + 1].color];if (S >= ans[0].s) {tmp.s = S;tmp.x = j;tmp.y = i;tmp.turn = 1;if (S > ans[0].s) ans.clear();ans.push_back(tmp);}}}}for (int i = n; i != 1; --i) {for (int j = 0; j != m; ++j) {if(cas[i][j].color != cas[i - 1][j].color) {int S = c[cas[i][j].color] + c[cas[i - 1][j].color];if (S >= ans[0].s) {tmp.s = S;tmp.x = j;tmp.y = i;tmp.turn = 0;if (S > ans[0].s) {ans.clear();}ans.push_back(tmp);}}//cout << "***" << endl;// 可以执行}//cout << "**" << endl;}cout << ans[0].s << endl;sort(ans.begin(), ans.end());cout << ans[0].y + 1 << " " << ans[0].x + 1 << " ";if(ans[0].turn) cout << "E" << endl;else cout << "N" << endl;return 0;}
标签:
原文地址:http://www.cnblogs.com/liangyongrui/p/4544861.html