1 条题解

  • 0
    @ 2025-4-14 18:45:30

    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
    上传者