616http://go.helloworldroom.com:50080/problem/616
这次是一道深搜题:
(1):以后做题不要用复杂的方式去做,如把一维数组改成二位数组,两次循环做的事用一次试一试,多一事不如少一事;
(2):函数里尽量传的参数更少,尽量用成全局;
本题思路: (从a[1][1]开始搜,搜过的用3代替,没搜到的就是二。为了防止开始就是1,把最外围一圈换成0。最后输出) 刚开始我是搜内部的,比较麻烦,而且函数也判断错是否越界。 AC:
include
include
using namespace std; int a[35][35],x1[4]={-1,0,1,0},y1[4]={0,-1,0,1},n;
void search(int x,int y){
if(x==n+1&&y==n+1){
return ;
}
for(int i=0;i<4;i++){
int x2=x+x1[i];
int y2=y+y1[i];
if(x2>=0&&x2<=n+1&&y2>=0&&y2<=n+1&&a[x2][y2]==0){
a[x2][y2]=3;
search(x2,y2);
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
}
}
search(0,0);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i][j]==3){
cout<<0<<" ";
}else if(a[i][j]==0){
cout<<2<<" ";
}else{
cout<<a[i][j]<<" ";
}
}
cout<<endl;
}
return 0;
}