油藏
非常可乐
想办法
飞利浦火车
火
救援
蜘蛛牌
胜利大逃亡
噩梦
c++代码
油藏 :
#include <iostream>
#include<stdio.h>
#include<stdlib.h>//±ê×¼¿â£»
#include <string>
#include<math.h>
#include<algorithm>
#include<memory.h>
#include<set>
#include<deque>
#include<list>
#include<stack>
#include<queue>
#define pi 3.1415926
using namespace std;
char a[110][110];//用来存图划分界限0-109;
int m=0,n=0, ans; //m,n,分别为行和列 ans表示计数
int v[110][110]={0};//标记被使用过的点的一个数组
int tx[]= {-1,-1,-1,0,0,1,1,1};
int ty[]= {-1,0,1,-1,1,-1,0,1}; //这两个数组表示移动方向的遍历
void dfs(int x,int y,int z)
{
int xx,yy;
if(x<0||x>=m||y<0||y>=n)//数组越界直接跳出函数;退出递归
{
return ;
}
if(v[x][y]>0||a[x][y]!='@')//被使用过的点或非邮袋直接跳过;
{
return ;
}
v[x][y]=1;//被使用;
for(int i=0;i<=7;i++)
{
xx=x+tx[i];
yy=y+ty[i];
dfs(xx,yy,z);
}
}
int main()
{
while(scanf("%d%d",&m,&n)&&m+n!=0)
{
ans=0;//多组输入魅族都要初始为零
memset(v,0,sizeof(v));
for(int i=0;i<m;i++)
{
scanf("%s",a[i]);//输入油田
}
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if((v[i][j]==0)&&(a[i][j]=='@'))//判断这个点是不是又带并且这个点还没有被标记为一个已经属于油藏的点当发现这个点就是一个新的油藏的出现
{
dfs(i,j,++ans);//每次运行dfs将同属于这个油藏的其他店继续标记之后每次运行一次判断为新的油藏电视就++ans
}
}
}
printf("%d\n",ans);
}
return 0;
}
第二题
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<sstream>
#include<fstream>
#include<vector>
#include<map>
#include<stack>
#include<list>
#include<set>
#include<queue>
#include<string>
#include<string.h>
#include<math.h>
using namespace std;
int b[3],book[101][101][101],half;
struct node
{
int cur[3],s;//水瓶里的水
} p,temp,q[100003008];
void bfs()
{
int head=0;
int tail=0;
p.cur[0]=b[0];
p.cur[1]=0;
p.cur[2]=0;
p.s=0;
q[head]=p;
tail++;
while(head<tail)
{
p=q[head];
for(int i=0; i<3; i++)
{
if(p.cur[i]>0)
{
for(int j=0; j<3; j++)
{
temp=p;
if(i==j)
continue;
if(temp.cur[i]>b[j]-temp.cur[j])
{
temp.cur[i]=temp.cur[i]-(b[j]-temp.cur[j]);
temp.cur[j]=b[j];
}
else
{
temp.cur[j]+=temp.cur[i];
temp.cur[i]=0;
}
if(book[temp.cur[0]][temp.cur[1]][temp.cur[2]]==0)
{
book[temp.cur[0]][temp.cur[1]][temp.cur[2]]=1;
temp.s++;
if((temp.cur[0]==half&&temp.cur[1]==half)||(temp.cur[2]==half&&temp.cur[1]==half)||(temp.cur[2]==half&&temp.cur[0]==half))
{
printf("%d\n",temp.s);
return ;
}
q[tail]=temp;
tail++;
}
}
}
}
head++;
}
printf("NO\n");
return ;
}
int main()
{
while(~scanf("%d%d%d",&b[0],&b[1],&b[2]))
{
if(b[0]==0&&b[1]==0&&b[2]==0)
{
return 0;
}
memset(book,0,sizeof(book));
book[b[0]][b[1]][b[2]]=1;
if(b[0]%2)
{
printf("NO\n");
}
else
{
half=b[0]/2;
bfs();
}
}
return 0;
}
第四题
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<sstream>
#include<fstream>
#include<vector>
#include<map>
#include<stack>
#include<list>
#include<set>
#include<queue>
#include<string>
#include<string.h>
#include<math.h>
using namespace std;
int n,k;
char a[3][150];
int book[3][150];
struct node
{
int h,g;
} _a,_b;
queue<node> p;
void bfs()
{
int tx,ty;
while(!p.empty())
{
_a=p.front();
p.pop();
tx=_a.h;
ty=_a.g;
//printf("tx:%d ty:%d\n",tx,ty);
if(_a.g>=n)
{
printf("YES\n");
return;
}
if(a[tx][ty+1]=='.')
{
ty++;
if(tx>=0&&tx<=2&&a[tx][ty+1]=='.'&&a[tx][ty+2]=='.'&&!book[tx][ty+2])
{
book[tx][ty+2]=1;
_a.h=tx;
_a.g=ty+2;
p.push(_a);
}
if(tx<=2&&tx>=1&&a[tx-1][ty]=='.'&&a[tx-1][ty+1]=='.'&&a[tx-1][ty+2]=='.'&&!book[tx-1][ty+2])
{
book[tx-1][ty+2]=1;
_a.h=tx-1;
_a.g=ty+2;
p.push(_a);
}
if(tx>=0&&tx<=1&&a[tx+1][ty]=='.'&&a[tx+1][ty+1]=='.'&&a[tx+1][ty+2]=='.'&&!book[tx+1][ty+2])
{
book[tx+1][ty+2]=1;
_a.h=tx+1;
_a.g=ty+2;
p.push(_a);
}
}
}
printf("NO\n");
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(book,0,sizeof(book));
while(!p.empty())
{
p.pop();
}
int c,d;
scanf("%d%d",&n,&k);
for(int j=0; j<3; j++)
{
scanf("%s",a[j]);//a[0]kaishi;
if(a[j][0]=='s')
{
c=j;
d=0;
}
}
for(int i=n; i<n+15; i++)
{
a[0][i]='.';
a[1][i]='.';
a[2][i]='.';
}
_a.h=c;
_a.g=d;
p.push(_a);
book[c][d]=1;
bfs();
}
return 0;
}
第五题代码
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<sstream>
#include<fstream>
#include<vector>
#include<map>
#include<stack>
#include<list>
#include<set>
#include<queue>
#include<string>
#include<string.h>
#include<math.h>
using namespace std;
char a[1005][1005];
int book[1005][1005];
int flag=-1;
int r,c;
struct node
{
int h,g;
int step;
}qq;
queue<node> q;
void bfs()
{
int tx,ty;
int next[4][2]={{-1,0},{1,0},{0,-1},{0,1}};
while(!q.empty())
{
qq=q.front();
q.pop();
if((qq.step>0)&&(qq.h==1||qq.g==1||qq.h==r||qq.g==c))
{
flag=qq.step;
return ;
}
for(int i=0;i<4;i++)
{
tx=qq.h+next[i][0];
ty=qq.g+next[i][1];
if(qq.h>=1&&qq.h<=r&&qq.g>=1&&qq.g<=c&&!book[tx][ty]&&a[tx][ty]=='.')
{
book[tx][ty]=1;
int step=0;
if(qq.step>0)
step=qq.step+1;
q.push(node{tx,ty,step});
}
}
}
}
int main()
{
int t;
int jx,jy;
scanf("%d",&t);
while(t--)
{
while(!q.empty())
{
q.pop();
}
flag=-1;
memset(book,0,sizeof(book));
scanf("%d%d",&r,&c);
for(int i=1;i<=r;i++)
{
for(int j=1;j<=c;j++)
{
scanf(" %c",&a[i][j]);
if(a[i][j]=='J')
{
jx=i;
jy=j;
book[i][j]=1;
}
if(a[i][j]=='F')
{
qq.h=i;
qq.g=j;
qq.step=0;
q.push(qq);
book[i][j]=1;
}
}
}
qq.h=jx;
qq.g=jy;
qq.step=1;
q.push(qq);
bfs();
if(flag==-1)
{
printf("IMPOSSIBLE\n");
}
else
{
printf("%d\n",flag);
}
}
return 0;
}