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 |
哪位可以帮忙指点一下哪里出错了,感谢万分!!//poj 3009 Curling 2.0 #include <iostream> using namespace std; int board[30][30]; int r, c; int s_r, s_c; int estep; struct pos { int x; int y; }; bool ok ( int i, int & x, int & y ) { if ( i == 1 ) //方向1 { for ( int j=y-1; j>=0; j-- ) { if ( board[x][j]==3 ) { y=j; return true; } if ( board[x][j]==1&&j==y-1 ) return false; if ( board[x][j]==1 ) { y=j+1; return true; } } return false; } if ( i == 2 ) //方向2 { for ( int j=x-1; j>=0; j-- ) { if ( board[j][y]==3 ) { x=j; return true; } if ( board[j][y]==1&&j==x-1 ) return false; if ( board[j][y]==1 ) { x=j+1; return true; } } return false; } if ( i == 3 ) //方向3 { for ( int j=y+1; j<c; j++ ) { if ( board[x][j]==3 ) { y=j; return true; } if ( board[x][j]==1&&j==y+1 ) return false; if ( board[x][j]==1 ) { y=j-1; return true; } } return false; } if ( i == 4 ) //方向4 { for ( int j=x+1; j<r; j++ ) { if ( board[j][y]==3 ) { x=j; return true; } if ( board[j][y]==1&&j==x+1 ) return false; if ( board[j][y]==1 ) { x=j-1; return true; } } return false; } return false; } void _change ( int i, int x, int y ) //改变球停止位置下一位的状态 { if ( i==1 && y-1>=0 && board[x][y-1]==1 ) board[x][y-1]=0; if ( i==2 && x-1>=0 && board[x-1][y]==1 ) board[x-1][y]=0; if ( i==3 && y+1 <c && board[x][y+1]==1 ) board[x][y+1]=0; if ( i==4 && x+1 <r && board[x+1][y]==1 ) board[x+1][y]=0; } void _changeback ( int i, int x, int y ) //改回初始状态 { if ( i==1 && y-1>=0 && board[x][y-1]==0 ) board[x][y-1]=1; if ( i==2 && x-1>=0 && board[x-1][y]==0 ) board[x-1][y]=1; if ( i==3 && y+1 <c && board[x][y+1]==0 ) board[x][y+1]=1; if ( i==4 && x+1 <r && board[x+1][y]==0 ) board[x+1][y]=1; } void dfs ( pos p, int step ) { if ( step >= estep || step > 10 ) return; if ( board[p.x][p.y] == 3 ) if ( step < estep ) { estep = step; return; } for ( int i=1; i<=4; i++ ) { //方向:2 pos pp = p; // ^ if ( ok( i, pp.x, pp.y ) ) // | { //1 < - p - > 3 _change( i, pp.x, pp.y ); // | dfs( pp, step+1 ); // 4 _changeback( i, pp.x, pp.y ); } } } int main () { freopen ( "3009.in","r",stdin ); while ( scanf( "%d%d",&c, &r ) && r && c ) { int i, j; for ( i=0; i<r; i++ ) for ( j=0; j<c; j++ ) { scanf ( "%d",&board[i][j] ); if ( board[i][j] == 2 ) { s_r = i; s_c = j; } } pos p; estep = 100000000; p.x = s_r; p.y = s_c; dfs ( p, 0 ); if ( estep != 100000000 ) printf ( "%d\n",estep ); else printf ( "-1\n" ); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator