1 条题解
-
0
C :
#include<stdio.h> #include<string.h> int n,m,sum,a[15][15],biaoji[15][15]; int fx[4]={-1,1,0,0}; int fy[4]={0,0,1,-1}; int dfs(int x,int y,int num) { int i,ans=0; if(num==sum/2) return 1; for(i=0;i<4;i++) { int nx=x+fx[i]; int ny=y+fy[i]; if(nx>=0&&nx<n&&ny>=0&&ny<m&&!biaoji[nx][ny]&&a[nx][ny]+num<=sum/2) { biaoji[nx][ny]=1; ans=dfs(nx,ny,num+a[nx][ny]); if(ans) return ans+1; biaoji[nx][ny]=0; } } return 0; } int main() { int i,j; sum=0; scanf("%d%d",&m,&n); for(i=0;i<n;i++) for(j=0;j<m;j++) { scanf("%d",&a[i][j]); sum+=a[i][j]; //printf("#####%d\n",sum); } if(sum%2) printf("0\n"); else { memset(biaoji,0,sizeof(biaoji)); biaoji[0][0]=1; printf("%d\n",dfs(0,0,a[0][0])); } return 0; }
C++ :
#include <iostream> #include <algorithm> #include <cstring> using namespace std; int map[15][15]={0},vis[15][15]; int dir[4][2]={0,1,0,-1,1,0,-1,0}; int num=0,m,n; int dfs(int a,int b,int sum) { int i,j,x,y,step=0; if(sum==num) return 1; for(i=0;i<4;i++) { x=a+dir[i][0]; y=b+dir[i][1]; if(x>0 && x<=m && y>0 && y<=n && vis[x][y]==0 && sum+map[x][y]<=num ) { vis[x][y]=1; step=dfs(x,y,sum+map[x][y]); if(step) return step+1; vis[x][y]=0; } } return 0; } int main() { int i,j,sum=0; memset(vis,0,sizeof(vis)); cin>>n>>m; for(i=1;i<=m;i++) for(j=1;j<=n;j++) { cin>>map[i][j]; sum=sum+map[i][j]; } if(sum%2==1) cout<<"0"<<endl; else { num=sum/2; vis[1][1]=1; cout<<dfs(1,1,map[1][1])<<endl; } return 0; }
Java :
import java.util.ArrayList; import java.util.Scanner; public class Main{ public static int temp; public static int s; public static int chang; public static int yuan; public static int min; public static void main(String[] args) { Scanner sc=new Scanner(System.in); while(sc.hasNext()) { int m=sc.nextInt(); int n=sc.nextInt(); temp=0; s=0; min=n*m; Point[] x=new Point[n*m]; for(int i=0;i<n;i++) { for(int k=0;k<m;k++) { x[i*m+k]=new Point(sc.nextInt()); s+=x[i*m+k].data; } } yuan=s; for(int i=0;i<n;i++) { for(int k=0;k<m;k++) { if(k!=0) { x[i*m+k].add(x[i*m+k-1]); } if(k!=m-1) { x[i*m+k].add(x[i*m+k+1]); } if(i!=0) { x[i*m+k].add(x[i*m+k-m]); }if(i!=n-1) { x[i*m+k].add(x[i*m+k+m]); } } } s-=x[0].data; bfs(x[0]); if(min==n*m) { s+=x[0].data; for(Point z:x) { s-=z.data; bfs(z); s+=z.data; } }System.out.println(min); } } public static void bfs(Point x) { for(int i=0;i<x.length;i++) { if(x.zhou[i].biao==0) { chang++; x.zhou[i].biao=1; s-=x.zhou[i].data; if(s*2==yuan) { if(min>chang+1) { min=chang+1; } } bfs(x.zhou[i]); chang--; x.zhou[i].biao=0; s+=x.zhou[i].data; } } } } class Point{ int data; Point[] zhou; int length; int biao; public Point(int a) { this.data=a; zhou=new Point[4]; length=0; biao=0; } public void add(Point a) { zhou[length++]=a; } }
- 1
信息
- ID
- 3447
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者