| ||||||||||
| 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 | |||||||||
TLE了,哪位仁兄帮帮我看一下:#include <iostream>
#include <fstream>
#include <stdio.h>
using namespace std;
struct point{
int x,y;
};
point cur,deln; //cur是当前的节点位置,deln是要删除的节点
point start,end;
int w,h; //h代表x,w代表y
int a[25][25];
int minmove;
bool isbond(int tmpx,int tmpy){
if(tmpx<h&&tmpx>=0&&tmpy<w&&tmpy>=0){
return true;
}
return false;
}
void move(int x,int y,int movenum){ //当前点的坐标
//四个方向
int i,j,k;
bool find=false;
movenum++;
for(i=x-1;!find&&a[x-1][y]!=1;i--){ //向上滑
if(isbond(i,y)){
if(a[i][y]==1){
cur.x=i+1;cur.y=y;
deln.x=i;deln.y=y;
find=true; //找到了一个可以碰撞的点
}else if(a[i][y]==3){
if(movenum<minmove){
minmove=movenum;
}
return;
}
}else{
break;
}
}
if(find){
point tmpdel=deln;
a[tmpdel.x][tmpdel.y]=0;
move(cur.x,cur.y,movenum);
a[tmpdel.x][tmpdel.y]=1;
}
find=false;
for(i=x+1;!find&&a[x+1][y]!=1;i++){ //向下滑
if(isbond(i,y)){
if(a[i][y]==1){
cur.x=i-1;cur.y=y;
deln.x=i;deln.y=y;
find=true; //找到了一个可以碰撞的点
}else if(a[i][y]==3){
if(movenum<minmove){
minmove=movenum;
}
return;
}
}else{
break;
}
}
if(find){
point tmpdel=deln;
a[tmpdel.x][tmpdel.y]=0;
move(cur.x,cur.y,movenum);
a[tmpdel.x][tmpdel.y]=1;
}
find=false;
for(i=y-1;!find&&a[x][y-1]!=1;i--){ //向左滑
if(isbond(x,i)){
if(a[x][i]==1){
cur.x=x;cur.y=i+1;
deln.x=x;deln.y=i;
find=true; //找到了一个可以碰撞的点
}else if(a[x][i]==3){
if(movenum<minmove){
minmove=movenum;
}
return;
}
}else{
break;
}
}
if(find){
point tmpdel=deln;
a[tmpdel.x][tmpdel.y]=0;
move(cur.x,cur.y,movenum);
a[tmpdel.x][tmpdel.y]=1;
}
find=false;
for(i=y+1;!find&&a[x][y+1]!=1;i++){ //向右滑
if(isbond(x,i)){
if(a[x][i]==1){
cur.x=x;cur.y=i-1;
deln.x=x;deln.y=i;
find=true; //找到了一个可以碰撞的点
}else if(a[x][i]==3){
if(movenum<minmove){
minmove=movenum;
}
return;
}
}else{
break;
}
}
if(find){
point tmpdel=deln;
a[tmpdel.x][tmpdel.y]=0;
move(cur.x,cur.y,movenum);
a[tmpdel.x][tmpdel.y]=1;
}
return;
}
void main(){
// ifstream cin("data.txt");
freopen("data.txt","r",stdin);
while(1){
// cin>>w>>h;
scanf("%d%d",&w,&h);
if(w==0)break;
int i,j,k;
for(i=0;i<h;i++){
for(j=0;j<w;j++){
//cin>>a[i][j];
scanf("%d",&a[i][j]);
if(a[i][j]==2){
start.x=i;
start.y=j;
}
if(a[i][j]==3){
end.x=i;
end.y=j;
}
}
}
minmove=10000;
cur=start;
move(cur.x,cur.y,0);
if(minmove>10)cout<<-1<<endl;
else cout<<minmove<<endl;
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator