| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
各位大哥们,帮小弟看一下程序把,我用的是回溯我用的是回溯法,但是总是出错,但我有找不出来,请大侠们帮忙看看,小弟不胜感激!程序如下:
#include<stdio.h>
#include<stdlib.h>
int sum=0,max=0;
int a[100][100];
void search(int m,int N);
int islegal(int m,int N,int i);
void myscanf(int N);
void search(int m,int N)
{
if(m>=N*N)
{
if(sum>=max)
max=sum;
}
else
{
search(m+1,N);
if(islegal(m-1,N,0))
{
sum++;
search(m-1,N);
sum--;
}
if(islegal(m+N,N,1))
{
sum++;
search(m+N,N);
sum--;
}
if(islegal(m+1,N,2))
{
sum++;
search(m+1,N);
sum--;
}
if(islegal(m-N,N,3))
{
sum++;
search(m-N,N);
sum--;
}
}
}
int islegal(int m,int N,int i)
{
int row,col;
row=m/N;
col=m%N;
if(row<0||row>=N||col<0||col>=N)
return 0;
else
switch(i)
{
case 0:
if(col+1<N)
{
if(a[row][col]<a[row][col+1])
return 1;
}
else
return 0;
break;
case 1: if(row-1>=0)
{
if(a[row][col]<a[row-1][col])//*************
return 1;
}
else
return 0;
break;
case 2: if(col-1>=0)
{
if(a[row][col]<a[row][col-1])
return 1;
}
else
return 0;
break;
case 3:
if(row+1<N)
{
if(a[row][col]<a[row+1][col])
return 1;
}
else
return 0;
break;
}
return 0;
}
void myscanf(int N)
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
}
void main()
{
int N,M;
scanf("%d%d",&M,&N);
myscanf(N);
search(0,N);
printf("%d",max);
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator