| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:大家帮忙看看啊,数据全过了,就是WA.........哪里错了????In Reply To:题目 Posted by:zjydhr at 2008-12-10 23:01:02 c++的:
#include<iostream>
#include<queue>
using namespace std;
bool array[100][100]={(false,false)};
int le[100][100] = {-1};
struct node{
int x;
int y;
int level;
int way;
};
queue<node> que;
int main(){
int w,h,x,y,i = 1;
while (cin>>w>>h && (w !=0 || h!=0)){
for (int s=0;s<100;++s)
for (int t=0;t<100;++t)
array[s][t] = false;
char temp;
cin.sync();
for (int s=1;s<=h;++s){
for (int t= 1;t<=w;++t){
temp = getchar();
if (temp == 'X')
array[s][t] = true;
}
if (s != h) getchar();
}
node root;
int count = 0;
cout<<"Board #"<<i++<<":"<<endl;
while (cin>>root.x>>root.y>>x>>y && (root.x != 0 || root.y != 0 || x != 0 || y != 0)){
for (int s=0;s<100;++s)
for(int t = 0;t<100;++t)
le[s][t] = -1;
while (!que.empty()) que.pop();
root.level = 0;
le[root.y][root.x] = 0;
root.way = -1;
que.push(root);
while (!que.empty()){
if (que.front().x == x && que.front().y == y){
if (le[y][x] == -1 || le[y][x] > que.front().level)
le[y][x] = que.front().level;
que.pop();
}
else {
//if (le[que.front().y][que.front().x] != -1 && que.front().level > le[que.front().y][que.front().x]){
// que.pop();
// continue;
//}
node current;
current.x = que.front().x;
current.y = que.front().y;
current.level = que.front().level;
current.way = que.front().way;
que.pop();
if (current.x<=w && ((current.x +1 == x && current.y == y)||array[current.y][current.x+1] == false)){
int a = current.level;
if (current.way != 0) ++a;
if (le[current.y][current.x+1] == -1 ||a <= le[current.y][current.x+1]){
node e;
e.x = current.x+1;
e.y = current.y;
e.level = a;
e.way = 0;
le[current.y][current.x+1] = a;
que.push(e);
}
}
if (current.x - 1>=0 && ((current.x -1 == x && current.y == y)|| array[current.y][current.x-1] == false)){
int a = current.level;
if (current.way != 1) ++a;
if (le[current.y][current.x-1] == -1 ||a <= le[current.y][current.x-1]){
node e;
e.x = current.x-1;
e.y = current.y;
e.level = a;
e.way = 1;
le[current.y][current.x-1] = a;
que.push(e);
}
}
if (current.y <= h && ((current.y + 1 == y && current.x == x)||array[current.y+1][current.x] == false)){
int a = current.level;
if (current.way != 2) ++a;
if (le[current.y+1][current.x] == -1 ||a <= le[current.y+1][current.x]){
node e;
e.x = current.x;
e.y = current.y+1;
e.level = a;
e.way = 2;
le[current.y+1][current.x] = a;
que.push(e);
}
}
if (current.y - 1 >= 0 && ((current.y - 1 == y && current.x == x)||array[current.y-1][current.x] == false)){
int a = current.level;
if (current.way != 3) ++a;
if (le[current.y-1][current.x] == -1 ||a <= le[current.y-1][current.x]){
node e;
e.x = current.x;
e.y = current.y-1;
e.level = a;
e.way = 3;
le[current.y-1][current.x] = a;
que.push(e);
}
}
}
}
if (le[y][x] == -1) cout<<"Pair "<<++count<<": impossible."<<endl;
else cout<<"Pair "<<++count<<": "<<le[y][x]<<" segments."<<endl;
}
cout<<endl;
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator