今天写了关于搜索的题目。
p1451
#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
int t=0;
bool map[200][200],b[200][200];
struct zb{
int x,y;
}q[30000];
int v[4][2]={0,1,1,0,-1,0,0,-1};
void bfs(int x,int y)
{
int f=0,r=1,X,Y;
t++;
q[1].x=x;
q[1].y=y;
while(f<r)
{
f++;
X=q[f].x,Y=q[f].y;
b[X][Y]=1;
for(int i=0;i<4;i++)
{
int x1=X+v[i][0];
int y1=Y+v[i][1];
if(map[x1][y1]&&(!b[x1][y1]))
{
q[++r].x=x1;
q[r].y=y1;
}
}
}
}
int main()
{
int m,n;
char a;
cin>>m>>n;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
cin>>a;
map[i][j]=(a!='0');
}
}
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(!b[i][j]&&map[i][j]==1)
{
bfs(i,j);
}
}
}
cout<<t;
}
p1331
#include<iostream>
#include<cstdio>
using namespace std;
int m,n,f[1000][1000],s,b[1000][1000],pd,x1,d1,xb,db;
char a[1000][1000];
int x2[4]={0,0,-1,1};
int y2[4]={-1,1,0,0};
void dfs(int x,int y)
{
if(x<1||x>n||y<1||y>m||f[x][y]==1||a[x][y]!='#')return ;
else
{
f[x][y]=1;
a[x][y]='~';
if(x>x1)x1=x;
if(y>d1)d1=y;
if(x<xb)xb=x;
if(y<db)db=y;
for(int i=0; i<4; i++)
dfs(x+x2[i],y+y2[i]);
}
return ;
}
int main()
{
cin>>n>>m;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
cin>>a[i][j];
for(int i=1; i<=n; i++)
{
for(int j=1; j<=m; j++)
{
if(a[i][j]=='#')
{
x1=-1,d1=-1,xb=1000,db=1000;
dfs(i,j);
for(int k=xb; k<=x1; k++)
{
for(int l=db; l<=d1; l++)
{
a[k][l]='.';
if(a[k][l]=='.')pd=1,s=-1;
}
}
if(pd==0)s++;
}
}
}
if(s!=-1)cout<<"There are "<<s<<" ships.";
else cout<<"Bad placement.";
return 0;
}
搜素的题目有一定的难度,我通过这几道题目,很好的复习了这些题目的写法。
2.java
今天学习了很多java的实现案例。例如,通过线程实现不同的窗口进行买票。