您的位置:首页 > 其它

UVA 657 - The die is cast

2013-01-21 02:16 337 查看
求高手!又是Runtime Error...

只是为啥捏..

View Code

#include <iostream>
#include <algorithm>
using namespace std;

const int LENGTH = 50;

struct Position{
int row;
int col;
};

void SearchBoundry(char pixel[][LENGTH], bool visit[][LENGTH],
int x, int y, int w, int h,
int& left, int& right, int&top, int& bottom) {
int front = 0, rear = 1;
Position pos[1000];
pos[0].row = x;
pos[0].col = y;
visit[x][y] = true;
while (front < rear){
int row = pos[front].row, col = pos[front].col;
front++;

left = min(left, col);
right = max(right, col);
top = min(top, row);
bottom = max(bottom, row);

for (int i = max(0, row-1); i <= min(row+1, h); i++){
for (int j = max(0, col-1); j <= min(col+1, w); j++){
if (!((i == (row-1) || i == (row+1)) &&
(j == (col-1) || j == (col+1))) &&
!visit[i][j] &&
(pixel[i][j] == '*' || pixel[i][j] == 'X')){

visit[i][j] = true;
pos[rear].row = i;
pos[rear].col = j;
rear++;
}
}
}
}
}

int CountDice(char pixel[][LENGTH], int& left, int& right,
int& top, int& bottom) {
int result = 0;

for (int i = top; i <= bottom; i++){
for (int j = left; j <= right; j++){
if (pixel[i][j] == '*')
pixel[i][j] = '.';
if (pixel[i][j] == 'X'){
result++;
int front = 0, rear = 1;
Position pos[250];
pos[0].row = i;
pos[0].col = j;
pixel[i][j] = '.';
while (front < rear){
int row = pos[front].row, col = pos[front].col;
front++;

for (int i = max(top, row-1); i <= min(row+1, bottom); i++){
for (int j = max(left, col-1); j <= min(col+1, right); j++){
if (!((i == (row-1) || i == (row+1)) &&
(j == (col-1) || j == (col+1))) &&
pixel[i][j] == 'X'){

pixel[i][j] = '.';
pos[rear].row = i;
pos[rear].col = j;
rear++;
}
}
}
}
}
}
}

return result;
}

int main(int argc, char *argv[]){
char pixel[LENGTH][LENGTH];
bool visit[LENGTH][LENGTH];

int w, h, count = 0;
while (cin >> w >> h && w+h){
cout << "Throw " << ++count << endl;
bool first = true;

for (int i = 0; i < LENGTH; i++)
for (int j = 0; j < LENGTH; j++){
pixel[i][j] = ' ';
visit[i][j] = false;
}

for (int i = 0; i < h; i++)
cin >> pixel[i];

for (int i = 0; i < h; i++){
for (int j = 0; j < w; j++){
if (pixel[i][j] == '*' || pixel[i][j] == 'X'){
int left = j, right = j, top = i, bottom = i;
SearchBoundry(pixel, visit, i, j, w, h,
left, right, top, bottom);

int dice = CountDice(pixel, left, right,
top, bottom);

if (first)
first = false;
else
cout << " ";
cout << dice;
}
}
}
cout << endl;

}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: