今天的题做的及其痛苦,(花了近五个小时)好菜好菜,不会bfsdfs的痛苦,看着别人的题解才勉强会这两道题
灌溉
#include <stdio.h>
#include <stdlib.h>
int a[100][100];
int b[100][100];
int n,m,t,k;
int q,p;
int c[4][2]={{0,-1},{0,1},{-1,0},{1,0}};
int count=0;
void bfs(int a[100][100],int k){
for(int i=1;i<n;i++){
for(int j=1;j<m;j++){
if(a[i][j]==1)
b[i][j]=1;
}
}
while(k){
for(int x=1;x<n;x++){
for(int y=1;y<m;y++){
if(a[x][y]==1){
for(int i=0;i<4;i++){
int r,l;
r=x+c[i][0];
l=y+c[i][1];
if(r<1||r>n||l<1||l>m)
continue;
else a[r][l]=1;
}
}
}
}
k--;
}
}
int main(int argc, char *argv[])
{
scanf("%d %d",&n,&m);
scanf("%d",&t);
for(int i=0;i<t;i++){
scanf("%d %d\n",&q,&p);
a[q][p]=1;
}
scanf("%d",&k);
bfs(a,k);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(a[i][j]==1)
count++;
}
}
printf("%d",count);
// 请在此输入您的代码
return 0;
}
小朋友崇拜权
#include <stdio.h>
#include <stdlib.h>
int a[100000];
int b[100000];
int max=0;
int x;
void dfs(int n,int m){
if(b[n]){
if(a[n]==a[x]){
if(m>max)
max=m;
}
}
else{
b[n]=1;
dfs(a[n],m+1);
b[n]=0;
}
}
int main(int argc, char *argv[])
{
int n;
scanf("%d\n",&n);
for(int i=1;i<=n;i++){
scanf("%d ",&a[i]);
}
for(int i=1;i<=n;i++){
x=i;
dfs(i,0);
}
printf("%d",max);
// 请在此输入您的代码
return 0;
}