P2853 [USACO06DEC]牛的野餐Cow Picnic
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,m,k,p[10000],can[10000]; 4 int w[1000+15][1000+15]; 5 bool vis[10000]; 6 7 void dfs(int pre) 8 { 9 for(int j=1;j<=n;j++) 10 { 11 if(w[pre][j]&&!vis[j]) 12 { 13 vis[j]=1; can[j]++; 14 dfs(j); 15 } 16 } 17 } 18 19 int main() 20 { 21 scanf("%d%d%d",&k,&n,&m); 22 for(int i=1;i<=k;i++) scanf("%d",&p[i]); 23 for(int i=1;i<=m;i++) 24 { 25 int x,y; 26 scanf("%d%d",&x,&y); 27 w[x][y]=1; 28 } 29 for(int i=1;i<=n;i++) w[i][i]=1; 30 for(int i=1;i<=k;i++) 31 { 32 memset(vis,0,sizeof(vis)); 33 dfs(p[i]); 34 } 35 36 int ans=0; 37 for(int i=1;i<=n;i++) if(can[i]==k) ans++; 38 printf("%d\n",ans); 39 return 0; 40 }
dfs
P1451 求细胞数量
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define maxn 100000 4 int n,m,ma[300][300],ans; 5 bool vis[300][300]; 6 int dx[4]={0,0,1,-1}; 7 int dy[4]={1,-1,0,0}; 8 char s[300][300]; 9 10 void dfs(int x,int y) 11 { 12 if(x<0||y<0||x>=n||y>=m||vis[x][y]) return ; 13 vis[x][y]=true; 14 for(int i=0;i<4;i++) 15 if(s[x+dx[i]][y+dy[i]]!=‘0‘) 16 dfs(x+dx[i],y+dy[i]); 17 } 18 19 int main() 20 { 21 scanf("%d%d",&n,&m); 22 for(int i=0;i<n;i++) cin>>s[i]; 23 for(int i=0;i<n;i++) 24 for(int j=0;j<m;j++) 25 if(!vis[i][j]&&s[i][j]!=‘0‘) ans++,dfs(i,j); 26 printf("%d\n",ans); 27 return 0; 28 }
dfs
1 #include<algorithm> 2 #include<iostream> 3 #include<cstring> 4 #include<cstdio> 5 #include<cmath> 6 #include<queue> 7 using namespace std; 8 #define inf 1000000 9 int n,num; 10 double ans=inf*1.0,x[10000],y[10000],dis[100][100]; 11 bool vis[100000]; 12 13 void dfs(double now,int num,int prex) 14 { 15 if(now>ans) return ; 16 if(num==n) 17 { 18 ans=min(ans,now); 19 return ; 20 } 21 for(int i=1;i<=n;i++) 22 { 23 if(!vis[i]) 24 { 25 vis[i]=1; 26 dfs(dis[prex][i]+now,num+1,i); 27 vis[i]=0; 28 } 29 } 30 31 } 32 33 int main() 34 { 35 scanf("%d",&n); 36 for(int i=1;i<=n;i++) 37 scanf("%lf%lf",&x[i],&y[i]); 38 for(int i=0;i<=n;i++) 39 for(int j=0;j<=n;j++) 40 if(i!=j) dis[i][j]=sqrt(pow(x[j]-x[i],2)+pow(y[j]-y[i],2)); 41 dfs(0,0,0); 42 printf("%.2lf\n",ans); 43 return 0; 44 }
dfs
时间: 2024-11-05 07:53:24