标签:
uva,572
简单dfs题目。
1 #include <iostream> 2 #include <cstring> 3 #include <cstdio> 4 #include <cstdlib> 5 6 using namespace std; 7 const int maxn=105; 8 9 char map[maxn][maxn]; 10 int vis[maxn][maxn]; 11 int n,m; 12 int dx[]={-1,0,-1,-1,0,1,1,1},dy[]={-1,-1,0,1,1,-1,0,1}; 13 14 bool check(int x,int y) 15 { 16 if(x<0 || x>=m || y<0 || y>=n) return false; 17 if(vis[x][y]) return false; 18 if(map[x][y]!=‘@‘) return false; 19 return true; 20 } 21 22 void dfs(int x,int y) 23 { 24 int xx,yy; 25 vis[x][y]=1; 26 map[x][y]=‘#‘; 27 for(int i=0;i<8;i++) 28 { 29 xx=x+dx[i]; 30 yy=y+dy[i]; 31 if(check(xx,yy)) 32 { 33 dfs(xx,yy); 34 } 35 } 36 37 } 38 39 40 int main() 41 { 42 while(scanf("%d %d",&m,&n) && n+m) 43 { 44 memset(map,0,sizeof(map)); 45 for(int i=0;i<m;i++) 46 scanf("%s",map[i]); 47 48 memset(vis,0,sizeof(vis)); 49 int cnt=0; 50 for(int i=0;i<m;i++) 51 for(int j=0;j<n;j++) 52 { 53 if(!vis[i][j] && map[i][j]==‘@‘) 54 { 55 dfs(i,j); 56 cnt++; 57 } 58 } 59 printf("%d\n",cnt); 60 } 61 return 0; 62 }
uva,439
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 5 using namespace std; 6 7 struct Node 8 { 9 int x,y; 10 int bu; 11 }q[11111]; 12 13 int dx[]={1,1,-1,-1,2,2,-2,-2},dy[]={2,-2,2,-2,1,-1,1,-1}; 14 int vis[15][15]; 15 int x,y,xx,yy; 16 char a[3],b[3]; 17 int cnt; 18 19 20 bool check(int x,int y) 21 { 22 if(x<1 || x>8 || y<1 || y>8) return false; 23 if(vis[x][y]) return false; 24 return true; 25 } 26 27 void bfs(int x,int y) 28 { 29 int head=0,tail=0; 30 q[head].x=x; 31 q[head++].y=y; 32 vis[x][y]=1; 33 for(int i=0;i<11111;i++) 34 q[i].bu=9999; 35 q[tail].bu=0; 36 while(tail!=head) 37 { 38 Node t=q[tail++]; 39 Node tt; 40 for(int i=0;i<8;i++) 41 { 42 tt.x=t.x+dx[i]; 43 tt.y=t.y+dy[i]; 44 if(tt.x==xx && tt.y==yy) 45 { 46 cnt=t.bu+1; 47 return; 48 } 49 if(check(tt.x,tt.y)) 50 { 51 vis[tt.x][tt.y]=1; 52 tt.bu=t.bu+1; //应该是求深度。。我一开始直接弄一个cnt++ 53 //弄成求附近有多少步了。。wa了两次 54 q[head++]=tt; 55 } 56 } 57 } 58 } 59 60 int main() 61 { 62 while(~scanf("%s%s",a, b)) 63 { 64 x=a[0]-‘a‘+1; 65 y=a[1]-‘0‘; 66 xx=b[0]-‘a‘+1; 67 yy=b[1]-‘0‘; 68 cnt=0; 69 if(x==xx && y==yy) 70 printf("To get from %s to %s takes 0 knight moves.\n",a,b); 71 else 72 { 73 memset(q,0,sizeof(q)); 74 memset(vis,0,sizeof(vis)); 75 bfs(x,y); 76 printf("To get from %s to %s takes %d knight moves.\n",a,b,cnt); 77 } 78 } 79 return 0; 80 }
uva,417
1 #include <iostream> 2 #include <cstdlib> 3 #include <cstring> 4 #include <map> 5 #include <cstdio> 6 7 using namespace std; 8 9 int used[26]; 10 char save[6],data[6]; 11 char answ[83685][6]; 12 int Count=0; 13 map<string,int> mp; 14 15 void dfs(int s,int n,int t) 16 { 17 if(n==t) 18 { 19 for(int i=0;i<t;i++) 20 answ[Count][i]=save[i]; 21 answ[Count++][t]=0; 22 } 23 else 24 { 25 for(int i=s;i<26;i++) 26 { 27 if(!used[i]) 28 { 29 used[i]=1; 30 save[n]=i+‘a‘; 31 dfs(i+1,n+1,t); 32 used[i]=0; 33 } 34 } 35 } 36 } 37 38 int main() 39 { 40 Count=1; 41 for(int i=1;i<6;i++) 42 dfs(0,0,i); 43 for(int i=1;i<Count;++i) 44 { 45 string s=answ[i]; 46 mp[s]=i; 47 } 48 while(cin>>data) 49 { 50 cout<<mp[data]<<endl; 51 } 52 return 0; 53 }
标签:
原文地址:http://www.cnblogs.com/do-it-best/p/5389585.html