牛客小白月赛16

牛客小白月赛16
E题:dfs

E题

dfs遍历

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int dir[2][2]={1,0,0,1};
int n,maxx;
int sum[1000];
int w[10][10];
void dfs(int x,int y,int wei){
    if(x==n&&y==n){
        sum[wei]=1;
        maxx=max(maxx,wei);
    }
    for(int i=0;i<2;i++){
        int xx=x+dir[i][0];
        int yy=y+dir[i][1];
        if(xx<1||xx>n||yy<1||yy>n)continue;
        dfs(xx,yy,wei+w[xx][yy]);
    }
}
int main(){
    while(scanf("%d",&n)!=EOF){
        memset(sum,0,sizeof(sum));
        memset(w,0,sizeof(w));
        maxx=0;
        for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)scanf("%d",&w[i][j]);
        dfs(1,1,w[1][1]);
        int ans=0;
        for(int i=0;i<=maxx;i++)ans+=sum[i];
        printf("%d\n",ans);
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Emcikem/p/11354211.html