POJ 1573
1 #include<iostream> 2 #include<stdio.h> 3 #define MAXN 15 4 using namespace std; 5 6 char _m[MAXN][MAXN]; 7 bool mark[MAXN][MAXN]; 8 int record[MAXN][MAXN]; 9 10 int r; 11 int c; 12 void dfs(int i,int j); 13 int main() 14 { 15 //freopen("acm.acm","r",stdin); 16 int i; 17 int j; 18 int place; 19 while(cin>>r>>c>>place) 20 { 21 if(!r && !c && !place) 22 break; 23 -- place; 24 memset(mark,false,sizeof(mark)); 25 // memset(record,0,sizeof(record)); 26 for(i = 0; i < r; ++ i) 27 { 28 for(j = 0; j < c; ++ j) 29 { 30 record[i][j] = 1; 31 } 32 } 33 for(i = 0; i < r; ++ i) 34 { 35 for(j = 0; j < c; ++ j) 36 { 37 cin>>_m[i][j]; 38 } 39 } 40 record[0][place] = 1; 41 mark[0][place] = true; 42 dfs(0,place); 43 // for(i = 0; i < r; ++ i) 44 // { 45 // for(j = 0; j < c; ++ j) 46 // { 47 // cout<<record[i][j]<<" "; 48 // } 49 // cout<<endl; 50 // } 51 } 52 } 53 void fun_1(int num); 54 void fun_2(int num,int num_1); 55 void dfs(int i,int j) 56 { 57 int tem1; 58 int tem2; 59 if(_m[i][j] == 'E') 60 { 61 if(j + 1 < c) 62 { 63 if(!mark[i][j+1]) 64 { 65 mark[i][j+1] = true; 66 record[i][j+1] += record[i][j]; 67 dfs(i,j+1); 68 return ; 69 } 70 else 71 { 72 fun_2(record[i][j+1]-1,record[i][j]-record[i][j+1]+1); 73 return ; 74 } 75 } 76 else 77 { 78 fun_1(record[i][j]); 79 return ; 80 } 81 }/////////////////////// 82 83 84 if(_m[i][j] == 'S') 85 { 86 if(i + 1 < r) 87 { 88 if(!mark[i+1][j]) 89 { 90 mark[i+1][j] = true; 91 record[i+1][j] += record[i][j]; 92 dfs(i+1,j); 93 return ; 94 } 95 else 96 { 97 fun_2(record[i+1][j]-1,record[i][j]-record[i+1][j]+1); 98 return ; 99 } 100 } 101 else 102 { 103 fun_1(record[i][j]); 104 return ; 105 } 106 }////////////////////////////// 107 108 109 if(_m[i][j] == 'W') 110 { 111 if(j - 1 >= 0) 112 { 113 if(!mark[i][j-1]) 114 { 115 mark[i][j-1] = true; 116 record[i][j-1] += record[i][j]; 117 dfs(i,j-1); 118 return ; 119 } 120 else 121 { 122 fun_2(record[i][j-1]-1,record[i][j]-record[i][j-1]+1); 123 return ; 124 } 125 } 126 else 127 { 128 fun_1(record[i][j]); 129 return ; 130 } 131 }/////////////////////////////////////////// 132 133 134 if(_m[i][j] == 'N') 135 { 136 if(i - 1 >= 0) 137 { 138 if(!mark[i-1][j]) 139 { 140 mark[i-1][j] = true; 141 record[i-1][j] += record[i][j]; 142 dfs(i-1,j); 143 return; 144 } 145 else 146 { 147 fun_2(record[i-1][j]-1,record[i][j]-record[i-1][j]+1); 148 return ; 149 } 150 } 151 else 152 { 153 fun_1(record[i][j]); 154 return ; 155 } 156 } 157 } 158 159 160 void fun_1(int num) 161 { 162 cout<<num; 163 // if(num != 1) 164 cout<<" step(s) to exit"<<endl; 165 // else 166 // cout<<" step to exit"<<endl; 167 } 168 169 void fun_2(int num,int num_1) 170 { 171 cout<<num; 172 // if(num != 1) 173 cout<<" step(s) before a loop of "; 174 // else 175 // cout<<" step before a loop of "; 176 cout<<num_1; 177 // if(num_1 != 1) 178 cout<<" step(s)"<<endl; 179 // else 180 // cout<<" step"<<endl; 181 }
关注我的公众号,当然,如果你对Java, Scala, Python等技术经验,以及编程日记,感兴趣的话。
技术网站地址: vmfor.com