目录
DFS
P1706 全排列问题
P1596 连接水池的数量
P1036 [NOIP2002 普及组] 选数
P1219 [USACO1.5] 八皇后 Checker Challenge
P2392 kkksc03考前临时抱佛脚
P2036 [COCI2008-2009 #2] PERKET
P1605 迷宫
P1101 单词方阵,以后再做,看别人的题解做的
P2404 自然数的拆分问题,以后在做
BFS
P1443 马的遍历
P1596 连接水池的数量
P1451 求细胞数量
P1135 奇怪的电梯
P2895 [USACO08FEB] Meteor Shower S(陨石)
P1162 填涂颜色
DFS:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
dfs(0);
}
static int n;
static int[]ans=new int[10];
static int[]vis=new int[10];
static void print() {
for(int i=1;i<=n;i++) {
System.out.print(" "+ans[i]);
}
System.out.println("");
}
static void dfs(int x) {
if(x==n) {
print();
return;
}
for(int i=1;i<=n;i++) {
if(vis[i]==0) {
vis[i]=1;ans[x+1]=i;
dfs(x+1);
vis[i]=0;
}
}
}
}m
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
m=in.nextInt();
for(int i=0;i=0&&xx=0&&yy
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
k=in.nextInt();
for(int i=0;i
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
dfs(1);
System.out.println(ans);
}
static int n,ans;
static int[]a=new int[31];
static int[]b1=new int[31];
static int[]b2=new int[31];
static int[]b3=new int[31];
static void dfs(int x) {
if(x>n) {
ans++;
if(ans<=3) {
for(int i=1;i<=n;i++) {
System.out.print(a[i]+" ");
}
System.out.println();
}
return;
}
for(int i=1;i<=n;i++) {
if(b1[i]==0&&b2[x+i]==0&&b3[x-i+15]==0) {
a[x]=i;
b1[i]=1;b2[x+i]=1;b3[x-i+15]=1;
dfs(x+1);
b1[i]=0;b2[x+i]=0;b3[x-i+15]=0;
}
}
}
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
for(int i=0;i<4;i++) {
sub[i]=in.nextInt();
}
for(int i=0;i<4;i++) {
for(int j=0;j=sub[i]) {
min=Math.min(min,Math.max(l,r));
return;
}
l+=times[i][j];
dfs(i, j+1);
l-=times[i][j];
r+=times[i][j];
dfs(i, j+1);
r-=times[i][j];
}
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
s=new int[n];
b=new int[n];
for(int i=0;i
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
m=in.nextInt();
t=in.nextInt();
sx=in.nextInt();
sy=in.nextInt();
fx=in.nextInt();
fy=in.nextInt();
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
arr[i][j]=1;
}
}
for(int i=1;i<=t;i++) {
int x=in.nextInt();
int y=in.nextInt();
arr[x][y]=0;
}
dfs(sx, sy);
System.out.println(total);
}
static int[]dx= {0,0,1,-1};
static int[]dy= {1,-1,0,0};
static int n,m,t,sx,sy,fx,fy,ans,total;
static int[][]arr=new int[10][10];
static int[][]vis=new int[10][10];
static void dfs(int x,int y) {
if(x==fx&&y==fy) {
total++;return;
}
else {
for(int i=0;i<=3;i++) {
int xx=x+dx[i],yy=y+dy[i];
if(vis[xx][yy]==0&&arr[xx][yy]==1) {
vis[x][y]=1;
dfs(xx,yy);
vis[x][y]=0;
}
}
}
}
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
le['y']='i';
le['i']='z';
le['z']='h';
le['h']='o';
le['o']='n';
le['n']='g';
n=in.nextInt();
for(int i=1;i<=n;i++) {
String s=in.next();
for(int j=1;j<=n;j++) {
chess[i][j]=s.charAt(j-1);
}
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
if(chess[i][j]=='y') {
for(int k=0;k<=7;k++) {
if(dfs(i, j, 'y', k))
ma[i][j]=true;
}
}
}
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=n;j++) {
if(ma[i][j])System.out.print(chess[i][j]);
else System.out.print("*");
}
System.out.println();
}
}
static int n;
static int[]dx= {1,1,1,-1,-1,-1,0,0};
static int[]dy= {1,0,-1,1,0,-1,1,-1};
static char[] le=new char[200];
static char[][] chess=new char[101][101];
static boolean[][]ma=new boolean[101][101];
static boolean dfs(int x,int y,char w,int p) {
if(w=='g') {
ma[x][y]=true;
return true;
}
int xx=x+dx[p],yy=y+dy[p];
if(xx>=1&&yy>=1&&xx<=n&&yy<=n&&chess[xx][yy]==le[w]) {
if(dfs(xx, yy, le[w], p)) {
ma[x][y]=true;
return true;
}
}
return false;
}
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
dfs(0, 1, 1);
}
static int n;
static int[]a=new int[10];
static void dfs(int he,int c,int qs) {
if(he==n) {
for(int i=1;i<=c-2;i++) {
System.out.print(a[i]+"+");
}
System.out.println(a[c-1]);
return;
}
if(he>n)return;
for(int i=qs;i<=n-1;i++) {
a[c]=i;
dfs(he+i, c+1, i);
a[c]=0;
}
}
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
for(int i=0;i<=n;i++) {
str[i]=in.next();
}
solve(" "+str[n],1);
System.out.println(length);
}
static String[]str=new String[20];
static int[]use=new int[20];
static int length=0,n;
static int f(String s1,String s2) {
for(int i=1;i=2)continue;
int c=f(strnow, str[i]);
if(c>0) {
use[i]++;
solve(str[i], lengthnow+str[i].length()-c);
use[i]--;
}
}
}
}
BFS:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
m=in.nextInt();
x=in.nextInt();
y=in.nextInt();
for(int i=1;i<=n;i++) {
Arrays.fill(ans[i], -1);
}
d dd=new d(x, y);
q.add(dd);
ans[x][y]=0;
while(!q.isEmpty()) {
d now=q.poll();
for(int i=0;i<8;i++) {
int xx=now.x;int yy=now.y;
xx+=x1[i];yy+=y1[i];
if(xx>=1&&xx<=n&&yy>=1&&yy<=m&&ans[xx][yy]==-1) {
ans[xx][yy]=ans[now.x][now.y]+1;
q.add(new d(xx, yy));
}
}
}
for(int i=1;i<=n;i++) {
for(int j=1;j<=m;j++) {
System.out.print(ans[i][j]+" ");
}
System.out.println();
}
}
static class d{
int x,y;
public d(int x,int y) {
this.x=x;this.y=y;
}
}
static Queue q=new LinkedList<>();
static int n,m,x,y;
static int[][]ans=new int[401][401];
static int[]x1= {1,1,2,2,-1,-1,-2,-2};
static int[]y1= {2,-2,1,-1,2,-2,1,-1};
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
m=in.nextInt();
char[][] arr=new char[n][m];
for(int i=0;iq=new LinkedList<>();
for(int i=0;i=0&&xx=0&&yy
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
m=in.nextInt();
in.nextLine();
char[][]a=new char[n][m];
for(int i=0;i=0&&yyy>=0&&xxxq=new LinkedList<>();
static int n,m,ans;
static int[]x1= {0,0,1,-1};
static int[]y1= {1,-1,0,0};
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int a=in.nextInt();
int b=in.nextInt();
int[]ans=new int[n+1];
Arrays.fill(ans, -1);
ans[a]=0;
int[]arr=new int[n+1];
for(int i=1;i<=n;i++) {
arr[i]=in.nextInt();
}
Queueq=new LinkedList<>();
q.add(a);
while(!q.isEmpty()) {
int now=q.poll();
if(now==b)break;
int next1=now+arr[now];
int next2=now-arr[now];
if(next1>=1&&next1<=n&&ans[next1]==-1) {
ans[next1]=ans[now]+1;
q.add(next1);
}
if(next2>=1&&next2<=n&&ans[next2]==-1) {
ans[next2]=ans[now]+1;
q.add(next2);
}
}
System.out.println(ans[b]);
}
}
最后一个点内存超限了。。。
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int m,sx,sy,st;
int[][]ma=new int[302][302];
boolean[][]v=new boolean[302][302];
int[][]ans=new int[302][302];
int[]dx= {0,0,0,1,-1};
int[]dy= {0,1,-1,0,0};
m=in.nextInt();
for(int i=0;i<302;i++) {
Arrays.fill(ma[i], -1);
}
for(int i=1;i<=m;i++) {
sx=in.nextInt();
sy=in.nextInt();
st=in.nextInt();
for(int j=0;j<5;j++) {
int nx=sx+dx[j];
int ny=sy+dy[j];
if(nx>=0&&ny>=0&&(ma[nx][ny]==-1||ma[nx][ny]>st)) {
ma[nx][ny]=st;
}
}
}
Queueq=new LinkedList<>();
v[0][0]=true;
q.add(new int[] {0,0});
while(!q.isEmpty()) {
int[]now=q.poll();
int x=now[0];int y=now[1];
int s=ans[x][y]+1;
if(ma[x][y]==-1) {
System.out.println(s-1);
return;
}
for(int i=1;i<=4;i++) {
int xx=x+dx[i],yy=y+dy[i];
if(xx>=0&&yy>=0&&s < (ma[xx][yy] == -1 ? 99999 : ma[xx][yy]) &&!v[xx][yy]) {
q.add(new int[] {xx,yy});
v[xx][yy]=true;
ans[xx][yy]=s;
}
}
}
System.out.println(-1);
}
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
for(int i=0;iq=new LinkedList<>();
for(int i=0;i=0&&xx=0&&yy
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
n=in.nextInt();
m=in.nextInt();
for(int i=0;iq=new LinkedList<>();
q.add(new int[] {i,j,0});
while(!q.isEmpty()) {
int[]now=q.poll();
int x=now[0];int y=now[1];int t=now[2];
if(a[x][y]=='=') {
System.out.println(t);return;
}
if(a[x][y]>='A'&&a[x][y]<='Z') {
int[]cs=f(x,y);
x=cs[0];y=cs[1];
}
for(int k=0;k<4;k++) {
int xx=x+dx[k];int yy=y+dy[k];
if(xx>=0&&xx=0&&yy