刷题(8.5h)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct node
{
int x,y,step;
}node;
int s[4][2]={{1,0},{-1,0},{0,-1},{0,1}};
int map[50][50];
int ma[50][50];
int vis[50][50];
void bfs(int sx,int sy);
node dui[1600];
int n,k=0;
int rear=0,head=0;
int main()
{
scanf("%d",&n);
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&map[i][j]);
ma[i][j]=map[i][j];
}
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
{
if(map[i][j]==0)
bfs(i,j);
}
for(i=0;i<n;i++){
for(j=0;j<n;j++)
{
if(map[i][j]==2)
ma[i][j]=2;
printf("%d ",ma[i][j]);
}
printf("\n");
}
return 0;
}
void bfs(int sx,int sy)
{
int i,j;
k=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
vis[i][j]=0;
node st;
st.x=sx;
st.y=sy;
st.step=0;
dui[rear].x=st.x;
dui[rear].y=st.y;
dui[rear].step=st.step;
rear++;vis[sx][sy]=1;
while(head<rear)
{
node p;
p.x=dui[head].x;
p.y=dui[head].y;
p.step=dui[head].step;
head++;
for(int i=0;i<4;i++)
{
int nx=p.x+s[i][0],ny=p.y+s[i][1];
if(nx<0||ny<0||nx>=n||ny>=n)
{
k++;continue;
}
if(vis[nx][ny]==1||map[nx][ny]!=0)
continue;
node yy;
yy.x=nx;
yy.y=ny;
yy.step=p.step+1;
vis[nx][ny]=1;
dui[rear].x=yy.x;
dui[rear].y=yy.y;
dui[rear].step=yy.step;
rear++;
}
}
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(vis[i][j]==1&&k!=0)
{
map[i][j]=3;
}
if(vis[i][j]==1&&k==0)
{
map[i][j]=2;
}
}
}
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int eat[10][2];
int n;
int sb=99999999;
void dfs(int s,int b,int x);
int vis[10]={0,0,0,0,0,0,0,0,0,0};
int main()
{
scanf("%d",&n);
int i;
for(i=0;i<n;i++)
scanf("%d %d",&eat[i][0],&eat[i][1]);
dfs(1,0,0);
printf("%d",sb);
return 0;
}
void dfs(int s,int b,int x)
{
if(x==n)
{
if(abs(s-b)<sb)
sb=abs(s-b);
return ;
}
int i;
int ss=1,bb=0;
for(i=0;i<n;i++)
{
if(vis[i]==1)
continue;
ss=s*eat[i][0];
bb=b+eat[i][1];
vis[i]=1;
if(abs(ss-bb)<sb)
sb=abs(ss-bb);
dfs(ss,bb,x+1);
vis[i]=0;
ss=1;
bb=0;
}
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int map[255];
int vis[255];
int n,a,b,sum=7999999;
void dfs(int L,int step);
int main()
{
scanf("%d %d %d",&n,&a,&b);
int i;
for(i=1;i<=n;i++)
{scanf("%d",&map[i]);vis[i]=0; }
vis[a]=1;
dfs(a,0);
if(sum!=7999999)printf("%d",sum);
else printf("-1");
return 0;
}
void dfs(int L,int step)
{
if(L==b)
{
if(step<sum)
sum=step;
}
if(step>sum)return ;
vis[L]=1;
if(L+map[L]<=n&&vis[L+map[L]]==0)
dfs(L+map[L],step+1);
if(L-map[L]>=1&&vis[L-map[L]]==0)
dfs(L-map[L],step+1);
vis[L]=0;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
typedef struct node
{
int x,y,step;
}node;
int sx,sy;
int s[8][2]={{1,-2},{-1,-2},{2,-1},{-2,-1},{1,2},{-1,2},{2,1},{-2,1}};
int map[500][500];
int vis[500][500];
void bfs();
node dui[160010];
int n,m;
int rear=0,head=0;
int main()
{
scanf("%d %d %d %d",&n,&m,&sx,&sy);
int i,j;
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
vis[i][j]=0;
map[i][j]=-1;
}
}
bfs();
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
printf("%-5d",map[i][j]);
}
printf("\n");
}
return 0;
}
void bfs()
{
node st;
st.x=sx;
st.y=sy;
st.step=0;
dui[rear].x=st.x;
dui[rear].y=st.y;
dui[rear].step=st.step;
rear++;vis[sx][sy]=1;map[sx][sy]=0;
while(head<rear)
{
node p;
p.x=dui[head].x;
p.y=dui[head].y;
p.step=dui[head].step;
head++;
for(int i=0;i<8;i++)
{
int nx=p.x+s[i][0],ny=p.y+s[i][1];
if(nx<1||ny<1||nx>n||ny>m||vis[nx][ny]==1)
{
continue;
}
node yy;
yy.x=nx;
yy.y=ny;
yy.step=p.step+1;
vis[nx][ny]=1;
map[nx][ny]=yy.step;
dui[rear].x=yy.x;
dui[rear].y=yy.y;
dui[rear].step=yy.step;
rear++;
}
}
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int s[4];
int a[4][20];
void dfs(int x,int k);
int L=0,R=0;
int sum=10086,sr=0;
int main()
{
int i,j;
for(i=0;i<4;i++)
scanf("%d",&s[i]);
for(i=0;i<s[0];i++)
scanf("%d",&a[0][i]);
for(i=0;i<s[1];i++)
scanf("%d",&a[1][i]);
for(i=0;i<s[2];i++)
scanf("%d",&a[2][i]);
for(i=0;i<s[3];i++)
scanf("%d",&a[3][i]);
for(i=0;i<4;i++)
{
L=0;
R=0;
sum=10086666;
dfs(i,0);
sr=sr+sum;
}
printf("%d",sr);
return 0;
}
void dfs(int x,int k)
{
if(k>=s[x])
{
if(L>R&&sum>L)sum=L;
if(R>L&&sum>R)sum=R;
if(L==R&&sum>R)sum=R;
return ;
}
L=L+a[x][k];
dfs(x,k+1);
L=L-a[x][k];
R=R+a[x][k];
dfs(x,k+1);
R=R-a[x][k];
}
总计8.5h
明日计划
1.看大话数据结构
2.巩固本周知识