1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
|
#include<iostream> #include<memory.h> using namespace std;
#define LIM 50
int allDFS(char Map[LIM][LIM],bool sign[LIM][LIM],int startX,int startY,int row,int col,bool mark){ if(mark==1){ if((Map[startX][startY]=='S') || (Map[startX][startY]=='+') || (Map[startX][startY]=='T')){ sign[startX][startY]=1; if(startX!=0 && sign[startX-1][startY]==0 && Map[startX-1][startY]!='#') allDFS(Map,sign,startX-1,startY,row,col,1); if((startX+1)!=row && sign[startX+1][startY]==0 && Map[startX+1][startY]!='#') allDFS(Map,sign,startX+1,startY,row,col,1); if(startY!=0 && sign[startX][startY-1]==0 && Map[startX][startY-1]!='#') allDFS(Map,sign,startX,startY-1,row,col,1); if((startY+1)!=col && sign[startX][startY+1]==0 && Map[startX][startY+1]!='#') allDFS(Map,sign,startX,startY+1,row,col,1); return 0; }else if(Map[startX][startY]=='-'){ sign[startX][startY]=1; if(startY!=0 && sign[startX][startY-1]==0 && Map[startX][startY-1]!='#') allDFS(Map,sign,startX,startY-1,row,col,1); if((startY+1)!=col && sign[startX][startY+1]==0 && Map[startX][startY+1]!='#') allDFS(Map,sign,startX,startY+1,row,col,1); return 0; }else if(Map[startX][startY]=='|'){ sign[startX][startY]=1; if(startX!=0 && sign[startX-1][startY]==0 && Map[startX-1][startY]!='#') allDFS(Map,sign,startX-1,startY,row,col,1); if((startX+1)!=row && sign[startX+1][startY]==0 && Map[startX+1][startY]!='#') allDFS(Map,sign,startX+1,startY,row,col,1); return 0; }else if(Map[startX][startY]=='.'){ sign[startX][startY]=1; if((startX+1)!=row && sign[startX+1][startY]==0 && Map[startX+1][startY]!='#') allDFS(Map,sign,startX+1,startY,row,col,1); return 0; }else{ return 0; } }else{ if(Map[startX][startY]!='#'){ sign[startX][startY]=1; if(startX!=0 && sign[startX-1][startY]==0 && (Map[startX-1][startY]=='+' || Map[startX-1][startY]=='|' || Map[startX-1][startY]=='.' || Map[startX-1][startY]=='S' || Map[startX-1][startY]=='T')) allDFS(Map,sign,startX-1,startY,row,col,0); if((startX+1)!=row && sign[startX+1][startY]==0 && (Map[startX+1][startY]=='+' || Map[startX+1][startY]=='|' || Map[startX+1][startY]=='S' || Map[startX+1][startY]=='T')) allDFS(Map,sign,startX+1,startY,row,col,0); if(startY!=0 && sign[startX][startY-1]==0 && (Map[startX][startY-1]=='+' || Map[startX][startY-1]=='-' || Map[startX][startY-1]=='S' || Map[startX][startY-1]=='T')) allDFS(Map,sign,startX,startY-1,row,col,0); if((startY+1)!=col && sign[startX][startY+1]==0 && (Map[startX][startY+1]=='+' || Map[startX][startY+1]=='-' || Map[startX][startY+1]=='S' || Map[startX][startY+1]=='T')) allDFS(Map,sign,startX,startY+1,row,col,0); return 0; } return 0; } }
int main(){ int row,col,i,j,sx,sy,ex,ey,num=0; bool fCanSearch[LIM][LIM],bCanSearch[LIM][LIM]; char Map[LIM][LIM]; memset(fCanSearch,0,LIM*LIM); memset(bCanSearch,0,LIM*LIM); cin>>row>>col; for(i=0;i<row;i++) for(j=0;j<col;j++){ cin>>Map[i][j]; if(Map[i][j]=='S'){ sx=i;sy=j; }else if(Map[i][j]=='T'){ ex=i;ey=j; } } allDFS(Map,fCanSearch,sx,sy,row,col,1); allDFS(Map,bCanSearch,ex,ey,row,col,0); if(fCanSearch[ex][ey]==0){ cout<<"I'm stuck!"<<endl; }else{ for(i=0;i<row;i++) for(j=0;j<col;j++){ if(fCanSearch[i][j]==1 && bCanSearch[i][j]==0) num++; } cout<<num<<endl; } return 0; }
|
If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !