杭电(1010)
1 #include <stdio.h> 2 #define MAXN 8 3 int n,m,t,c,d; 4 bool flag=false; 5 char a[MAXN][MAXN]; 6 int dir[8][2]={1,0,0,1,-1,0,0,-1}; 7 void dfs(int x,int y,int num ) 8 { 9 10 if(!flag) 11 { 12 for(int i=0;i<4;i++) 13 { 14 if(a[x+dir[i][0]][y+dir[i][1]]==‘.‘&&!flag) 15 { 16 a[x+dir[i][0]][y+dir[i][1]]=‘#‘; 17 dfs(x+dir[i][0],y+dir[i][1],num++); 18 a[x+dir[i][0]][y+dir[i][1]]=‘.‘; 19 } 20 else if(a[x+dir[i][0]][y+dir[i][1]]==‘D‘&&num==t) 21 { 22 flag=true; 23 return; 24 } 25 } 26 27 } 28 29 } 30 31 void xxoo() 32 { 33 for(int i=0;i<MAXN;i++) 34 { 35 for(int j=0;j<MAXN;j++) 36 a[i][j]=‘X‘; 37 } 38 } 39 int main(void) 40 { 41 char b[30]; 42 while(scanf("%d %d %d",&n,&m,&t)&&n&&m&&t) 43 { 44 xxoo(); 45 flag=false; 46 getchar(); 47 for(int i=1;i<=n;i++) 48 { 49 gets(b); 50 for(int j=1;j<=m;j++) 51 { 52 a[i][j]=b[j-1]; 53 if(a[i][j]==‘S‘) 54 c=i,d=j+1; 55 } 56 57 } 58 for(int i=0;i<MAXN;i++) 59 { 60 for(int j=0;j<MAXN;j++) 61 printf("%c",a[i][j]); 62 printf("\n"); 63 } 64 65 dfs(c,d,0); 66 if(flag) 67 printf("YES\n"); 68 else 69 printf("NO\n"); 70 } 71 }
江西理工大学第1.5周DFS 棋盘回溯递归D
1 #include <stdio.h> 2 #include <iostream> 3 #include <string.h> 4 using namespace std; 5 char a[120][120]; 6 int n,m,f,sum; 7 int dir[8][2]= {-1,0,0,-1,0,1,1,0,1,1,-1,-1,1,-1,-1,1}; 8 int b[120]; 9 void dfs(int x, int y) 10 { 11 if(y==m) 12 { 13 sum++; 14 return; 15 } 16 for(int k=x; k<n; k++) 17 for(int j=0; j<n; j++) 18 if(a[k][j]==‘#‘&&b[j]==0) 19 { 20 b[j]=1; 21 dfs(k+1,y+1); 22 b[j]=0; 23 } 24 } 25 int main() 26 { 27 while(scanf("%d %d",&n,&m)&&n!=-1&&m!=-1) 28 { 29 memset(b,0,sizeof(b)); 30 sum=0; 31 for(int i=0; i<n; i++) 32 scanf("%s",a[i]); 33 dfs(0,0); 34 cout<<sum<<endl; 35 } 36 return 0; 37 }
江西理工大学第1.5周DFS E题
1 #include <stdio.h> 2 #include <iostream> 3 #include <string.h> 4 using namespace std; 5 char a[120][120]; 6 int n,m,f,sum,num; 7 int dir[8][2]= {0,1,1,0,-1,0,0,-1,1,1,-1,-1,1,-1,-1,1}; 8 char b[120]; 9 void dfs(int x, int y) 10 { 11 if(x<0||x>=n||y<0||y>=m) return ; 12 f=1; 13 for(int k=0; k<num; k++) 14 { 15 if(a[x][y]==b[k]) 16 f=0; 17 } 18 if(f==0&&(x||y)) 19 return ; 20 else if(f==1) 21 sum++,b[num]=a[x][y],num++; 22 for(int t=0; t<4; t++) 23 { 24 int xx=x+dir[t][0]; 25 int yy=y+dir[t][1]; 26 dfs(xx,yy); 27 } 28 29 } 30 int main() 31 { 32 while(scanf("%d %d",&n,&m)) 33 { 34 getchar(); 35 memset(b,0,sizeof(b)); 36 sum=1,num=1; 37 for(int i=0; i<n; i++) 38 scanf("%s",a[i]); 39 b[0]=a[0][0]; 40 dfs(0,0); 41 cout<<sum<<endl; 42 } 43 return 0; 44 }
只有不断学习才能进步!
原文:https://www.cnblogs.com/wenbao/p/5727801.html