潜水的杰迷 潜水的杰迷
关注数: 153 粉丝数: 152 发帖数: 2,435 关注贴吧数: 6
我想问道水题。。 一矩形阵列由数字0到9组成,数字1到9代表细胞,细胞的定义为沿细胞数字上下左右还是细胞数字则为同一细胞,求给定矩形阵列的细胞个数。 如:阵列 0234500067 1034560500 2045600671 0000000089      有4个细胞 #include<stdio.h> int a[100][100],v[100][100]; int t,ans=0,m,n; int nx[]={0,1,-1,0,0}; int ny[]={0,0,0,1,-1}; void dfs(int x,int y) {       int i;             for(i=1;i<=4;i++)       {                  if(x+nx[i]>=1&&x+nx[i]<=n&&y+ny[i]>=1&&y+ny[i]<=m&&a[x+nx[i]][y+ny[i]]&&(!v[x+nx[i]][y+ny[i]]))                  v[x+nx[i]][y+ny[i]]=1;                  dfs(x+nx[i],y+ny[i]);       } } main() {        FILE *f1=fopen("in.in","r");        int i,j;        fscanf(f1,"%d %d\n",&m,&n);        for(i=1;i<=m;i++)           {for(j=1;j<=n;j++)           {                            fscanf(f1,"%c",&t);                            if(t=='0')a[i][j]=0;                            else a[i][j]=1;}                            fscanf(f1,"\n");}           for(i=1;i<=m;i++)           for(j=1;j<=n;j++)           if(a[i][j]&&(!v[i][j]))           {                         v[i][j]=1;                         ans++;                         dfs(i,j);                         printf("%d %d\n",i,j);}           printf("%d\n",ans);           system("pause");           }
简单程序,请帮忙找错。。 P1004 trs喜欢滑雪。他来到了一个滑雪场,这个滑雪场是一个矩形,为了简便,我们用r行c列的矩阵来表示每块地形。为了得到更快的速度,滑行的路线必须向下倾斜。      例如样例中的那个矩形,可以从某个点滑向上下左右四个相邻的点之一。例如24-17-16-1,其实25-24-23…3-2-1更长,事实上这是最长的一条。 #include<stdio.h> int r,c,answer=0; int ax[]={0,0,1,0,-1}; int ay[]={0,1,0,-1,0}; int map[101][101]; int vis[101][101]; int max(int x,int y) {      return x>y?x:y; } int dfs(int x,int y) {       int ans=0,i,t;       if(vis[x][y]!=0) return vis[x][y];//已访问过       for(i=1;i<=4;i++)       {                  if(x+ax[i]>=1&&x+ax[i]<=c&&y+ay[i]>=1&&y+ay[i]<=r)                  {                                                                    t=dfs(x+ax[i],y+ay[i]);                                                                    t=max(t,ans);                  }       }       vis[x][y]=ans+1;       return ans+1;       } main() {        FILE *f1=fopen("in.in","r");        int i,j,t=0;        fscanf(f1,"%d %d",&c,&r);        for(i=1;i<=c;i++)           for(j=1;j<=r;j++)           fscanf(f1,"%d",&map[i][j]);        for(i=1;i<=c;i++)           for(j=1;j<=r;j++)           answer=max(answer,dfs(i,j));           printf("%d\n",answer);           system("pause"); } 加断点以后递归t=dfs(x+ax[i],y+ay[i]); 这句有问题,,
1 下一页