| ||||||||||
| 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 | |||||||||
为什么RUNTIME ERROR啊,在VC下调没有问题啊用递归回溯,已经通过了,可稍做改动,改为跌带回溯,我调试是和用递归的结果一样,可为什么一提交就RUNTIME ERROR啊
#include <iostream.h>
char a[20]; //存接收的字符串
int b[20][20]; //用于在交换之前保存原串
int c[20]; //由于记录每层以遍历的的情况,遍历完一棵子树后加1
int length; //接收的字符串长度
int n;
template<class Elem>
inline void swap(Elem &e1, Elem &e2) {
Elem temp = e1;
e1 = e2;
e2 = temp;
}
int convert(char s)
{
if(s>='A'&&s<='Z')
return (s-'A')*2;
if(s>='a'&&s<='z')
return (s-'a')*2+1;
return int(s);
}
void sort(char* s,int len)
{
int i,j;
int temp1,temp2;
for(i=0;i<len-1;i++)
for(j=0;j<len-1-i;j++)
{
temp1=convert(s[j]);
temp2=convert(s[j+1]);
if(temp1>temp2)
swap(s[j],s[j+1]);
}
}
//int sum;
void create(int l) //l代表层数
{
int i,j,k;
for(i=0;i<=length-2;i++) //初始化
c=i;
while(c[0]!=length) //当第0层即根的所有子树全搜索过后结束
{
if(c[l]<length&&l<length-1)
{
for(k=l;k<c[l];k++)
if(a[k]==a[c[l]])
break;
if(k==c[l])
{
for(j=l;j<length;j++) //复制保存 copy()
b[l][j]=a[j];
swap(a[l],a[c[l]]);
sort(a+l+1,length-l-1);
l++;
}
else
c[l]++;
}
else if(l==length-1) //打印结果,退到上层
{
for(k=0;k<length;k++)
cout<<a[k];
cout<<endl;
// sum++;
l--;
// for(j=l;j<length;j++)
// a[j]=b[l][j];
c[l]++;
}
else //退到上层
{
l--;
c[l]++;
if(c[l]<length)
{
for(j=l;j<length;j++) //copy( )back
a[j]=b[l][j];
}
c[l+1]=l+1; //清为l+1,以便到同层的右面分支时使用
}
}
}
void main( )
{
int i;
char ch;
cin>>n;
ch=cin.get( );
for(i=0;i<n;i++)
{
int j=0;
while((ch=cin.get( ))!='\n')
{
a[j]=ch;
j++;
}
length=j;
sort(a,length);
create(0);
// cout<<sum<<endl;
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator