P1036 [NOIP2002 普及组] 选数https://www.luogu.com.cn/problem/P1036
#include
using namespace std;
int n,k,s[50],ans;
bool prime(int x)
{
for(int i=2;i*i<=x;i++)
if(x%i==0)
return false;
return true;
}
void dfs(int m,int sum,int step)
{
if(m==k)
{
if(prime(sum))
ans++;
return;
}
for(int i=step;i<=n;i++)
dfs(m+1,sum+s[i],i+1);
return;
}
int main()
{
cin>>n>>k;
for(int i=1;i<=n;i++)
cin>>s[i];
dfs(0,0,1);
cout<
P1460 [USACO2.1]健康的荷斯坦奶牛 Healthy Holsteinshttps://www.luogu.com.cn/problem/P1460
#include
using namespace std;
int v,w[1010],g,s[1010][1010],ans[1010],z[1010],minn=0x3f3f3f3f;
bool pd(int x)
{
for(int i=1;i<=v;i++)
{
int tt=0;
for(int j=1;j<=x;j++)
tt+=s[z[j]][i];
if(ttg)
{
if(pd(m)&&minn>m)
{
minn=m;
for(int i=1;i<=minn;i++)
ans[i]=z[i];
}
return;
}
z[m+1]=n;
dfs(n+1,m+1);//搜索
dfs(n+1,m);//回溯,如果不选第t种饲料的操作
}
int main()
{
cin>>v;
for(int i=1;i<=v;i++)
cin>>w[i];
cin>>g;
for(int i=1;i<=g;i++)
for(int j=1;j<=v;j++)
cin>>s[i][j];
dfs(1,0);
cout<
P9011 [USACO23JAN] Air Cownditioning II Bhttps://www.luogu.com.cn/problem/P9011
#include
using namespace std;
int n,m,s,t,c,x[200],a[200],b[200],p[200],mm[200],minn=0x3f3f3f3f;
bool pd()
{
for(int i=1;i<=100;i++)
if(x[i]>0)
return false;
return true;
}
void dfs(int k,int sum)
{
if(k==m+1)
{
if(pd())
minn=min(minn,sum);
return;
}
dfs(k+1,sum);//不选
for(int i=a[k];i<=b[k];i++)
x[i]-=p[k];
dfs(k+1,sum+mm[k]);//选
for(int i=a[k];i<=b[k];i++)//回溯
x[i]+=p[k];
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>s>>t>>c;
for(int j=s;j<=t;j++)
x[j]=c;
}
for(int i=1;i<=m;i++)
cin>>a[i]>>b[i]>>p[i]>>mm[i];
dfs(1,0);
cout<
P8605 [蓝桥杯 2013 国 AC] 网络寻路https://www.luogu.com.cn/problem/P8605
#include
using namespace std;
long long n,m,ans,pos,x,y;
vector v[100010];
bool vis[10010];
void dfs(long long u,long long step)
{
if(step==4)
ans++;
else
{
for(int i=0;i>n>>m;
for(long long i=1;i<=m;i++)
{
cin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
}
for(int i=1;i<=n;i++)
{
vis[i]=1;
dfs(pos=i,1);
vis[i]=0;
}
cout<
P1596 [USACO10OCT]Lake Counting Shttps://www.luogu.com.cn/problem/P1596
#include
using namespace std;
int n,m,ans;
int dx[]={0,1,1,1,0,-1,-1,-1},dy[]={1,1,0,-1,-1,-1,0,1};
char mp[110][110];
void dfs(int x,int y)
{
mp[x][y]='.';
for(int i=0;i<8;i++)
if(mp[x+dx[i]][y+dy[i]]=='W')
dfs(x+dx[i],y+dy[i]);
return;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>mp[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(mp[i][j]=='W')
dfs(i,j),ans++;
cout<
#include
using namespace std;
int n,m,ans;
int dx[]={0,1,1,1,0,-1,-1,-1},dy[]={1,1,0,-1,-1,-1,0,1};
char mp[110][110];
void bfs(int x,int y)
{
queue> q;
q.push(make_pair(x,y));
mp[x][y]='.';
while(!q.empty())
{
int xx=q.front().first,yy=q.front().second;
q.pop();
for(int i=0;i<8;i++)
{
int nx=xx+dx[i],ny=yy+dy[i];
if(nx<1||ny<1||nx>n||ny>m||mp[nx][ny]=='.')
continue;
mp[nx][ny]='.';
q.push(make_pair(nx,ny));
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>mp[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(mp[i][j]=='W')
bfs(i,j),ans++;
cout<
P1451 求细胞数量https://www.luogu.com.cn/problem/P1451
#include
using namespace std;
int n,m,mp[110][110],ans;
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
void dfs(int x,int y)
{
mp[x][y]=0;
for(int i=0;i<4;i++)
{
int xx=x+dx[i],yy=y+dy[i];
if(xx>0&&yy>0&&xx<=n&&yy<=m&&mp[xx][yy]!=0)
dfs(xx,yy);
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%1d",&mp[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(mp[i][j]!=0)
dfs(i,j),ans++;
cout<
#include
using namespace std;
int n,m,mp[110][110],ans;
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
void bfs(int x,int y)
{
queue> q;
q.push(make_pair(x,y));
mp[x][y]=0;
while(!q.empty())
{
int xx=q.front().first,yy=q.front().second;
q.pop();
for(int i=0;i<4;i++)
{
int nx=xx+dx[i],ny=yy+dy[i];
if(nx<1||ny<1||nx>n||ny>m||mp[nx][ny]==0)
continue;
mp[nx][ny]=0;
q.push(make_pair(nx,ny));
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%1d",&mp[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(mp[i][j]!=0)
bfs(i,j),ans++;
cout<
P1162 填涂颜色https://www.luogu.com.cn/problem/P1162
#include
using namespace std;
int n,mp[50][50];
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
void dfs(int x,int y)
{
if(x<0||x>n+1||y<0||y>n+1||mp[x][y]!=0)
return;
mp[x][y]=3;
for(int i=0;i<4;i++)
dfs(x+dx[i],y+dy[i]);
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>mp[i][j];
dfs(0,0);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(mp[i][j]==3) cout<<0<<" ";
else if(mp[i][j]==0) cout<<2<<" ";
else cout<<1<<" ";
}
cout<
P8604 [蓝桥杯 2013 国 C] 危险系数https://www.luogu.com.cn/problem/P8604
#include
using namespace std;
int n,m,u,v,x,y,ans;
int road1[4000][4000],road2[4000][4000];
bool dfs(int pos)
{
queue q;
q.push(x);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
road2[i][j]=road1[i][j];//存储原矩阵
while(!q.empty())
{
int p=q.front();
for(int i=1;i<=n;i++)
{
if(road2[p][i]&&i!=pos&&p!=pos)//连通且不含pos
{
if(i==y)
return 0;
road2[p][i]=0;
road2[i][p]=0;
q.push(i);
}
}
q.pop();
}
return 1;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>u>>v;
road1[u][v]=1;
road1[v][u]=1;
}
cin>>x>>y;
if(dfs(0)==1)//两点不连通
{
cout<<"-1";
return 0;
}
for(int i=1;i<=n;i++)//枚举关键点
if(i!=x&&i!=y)
if(dfs(i))
ans++;
cout<
P6183 [USACO10MAR] The Rock Game Shttps://www.luogu.com.cn/problem/P6183
#include
using namespace std;
int n,vis[1<<20],a[1<<20],ans[1<<20][20];
void print()
{
for(int i=1;i<=1<>n;
for(int i=1;i<=n;i++)
cout<<'O';
cout<
P1506 拯救oibh总部https://www.luogu.com.cn/problem/P1506
#include
using namespace std;
int n,m,ans;
int mp[550][550],dx[]={0,1,0,-1},dy[]={1,0,-1,0};
char c;
void dfs(int x,int y)
{
if(x<0||x>n+1||y<0||y>m+1||mp[x][y])
return;
mp[x][y]=1;
for(int i=0;i<4;i++)
dfs(x+dx[i],y+dy[i]);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>c;
mp[i][j]=(c=='0'?0:1);
}
}
dfs(0,0);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(!mp[i][j])
ans++;
cout<
P2802 回家https://www.luogu.com.cn/problem/P2802
#include
using namespace std;
struct node
{
int x,y,step,HP;
};
int n,m,mp[10][10];
int vis[10][10],dx[]={0,1,0,-1},dy[]={1,0,-1,0};
queue q;
void bfs()//当小H的HP为1时我们即可判定小H已经死亡。
{
while(!q.empty())
{
int x=q.front().x,y=q.front().y,k=q.front().step,hp=q.front().HP;
q.pop();
if(mp[x][y]==3)
{
cout<1)
{
for(int i=0;i<4;i++)
{
int xx=x+dx[i],yy=y+dy[i];
if(xx<1||xx>n||yy<1||yy>m)
continue;//边界
if((mp[xx][yy]==1||mp[xx][yy]==3)&&vis[xx][yy]>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>mp[i][j];
if(mp[i][j]==2)
q.push(node{i,j,0,6});
}
}
bfs();
cout<<"-1";//无解
}
P8662 [蓝桥杯 2018 省 AB] 全球变暖https://www.luogu.com.cn/problem/P8662
#include
using namespace std;
int n,cnt,sum,ans,t;
int dx[]={0,1,0,-1},dy[]={1,0,-1,0};
char mp[1010][1010];
void dfs(int x,int y)
{
if(!t)
{
cnt=0;
for(int i=0;i<4;i++)
if(mp[x+dx[i]][y+dy[i]]!='.')
cnt++;
if(cnt==4)
ans++,t=1;
}
mp[x][y]='*';
for(int i=0;i<4;i++)
{
int xx=x+dx[i],yy=y+dy[i];
if(xx<0||xx>=n||yy<0||yy>=n||mp[xx][yy]!='#')
continue;
dfs(xx,yy);
}
}
int main()
{
cin>>n;
for(int i=0;i>mp[i][j];
for(int i=1;i