C++ uvaoj 208如何加速我的程序
为什么我的程序有时间限制的错误? 因为这样? 这就是问题所在C++ uvaoj 208如何加速我的程序,c++,C++,为什么我的程序有时间限制的错误? 因为这样? 这就是问题所在 #包括 #包括 使用名称空间std; 国际地图[22][44];; 国际图书[22]; 整数合计; 整数和; int-way[22]; int-tails[22]; 内尾; void init() { memset(map,0,sizeof(map)); memset(book,0,sizeof(book)); 总和=0; memset(way,0,sizeof(way)); 路[1]=1; memset(tails,0,sizeo
#包括
#包括
使用名称空间std;
国际地图[22][44];;
国际图书[22];
整数合计;
整数和;
int-way[22];
int-tails[22];
内尾;
void init()
{
memset(map,0,sizeof(map));
memset(book,0,sizeof(book));
总和=0;
memset(way,0,sizeof(way));
路[1]=1;
memset(tails,0,sizeof(tails));
}
空排序()
{
int t;
对于(int i=1;i开始,您访问的是代码<尾随<代码> >代码> map <代码>结束。C++数组为零索引,因此第一个元素为0,最后有效元素为代码>尾部[21 ] < /> >和<代码> MAP(21)[43 ] < /p> > p> > p>因为排序算法处于最坏情况<强> O(n*n),您可以使用InnoSort获得更好的最坏情况复杂性O(n*log(n))
你使用C++,然后使用<代码>排序> <代码>函数>你可以告诉我们实际的问题是什么?它是否太慢?在那种情况下:你尝试过对它进行配置吗?顺便说一下,随意使用<代码> PrTrF(“案例%d:\n”,c);< /C>和<代码> PrimTf(“%-D路由从FielStand到StutCurrest%D.\n””(,sum,total);
有一段时间没有看到任何人使用Bubblesort。因为我认为Bubblesort在其中已经足够了…日期太少了,我不需要使用O(NLogN)@CherryUnix:quicksort有最坏的情况复杂性O(n*n)那么,它并不是快速排序和堆排序。然后从STL头重新编写这个算法。STL是C++项目的一部分,您可以在需要的地方使用它。实际上……我们不允许在NOI(信息学国家奥林匹克)使用STL。除了map.一般来说,STL不允许出现在这样的竞争中,因为它给了你相对于C和Java人群不公平的优势。但是如果你有std::map
(而且只有这一点),你仍然可以从中受益。它有一个构造函数,可以从迭代器范围中构造一个排序容器。当然,你必须加入一个伪值(因为您不能设置std::set
),但您可以忽略它。
#include <cstdio>
#include <cstring>
using namespace std;
int map[22][44];
int book[22];
int total;
int sum;
int way[22];
int tails[22];
int tail;
void init()
{
memset(map,0,sizeof(map));
memset(book,0,sizeof(book));
sum =0;
memset(way,0,sizeof(way));
way[1]=1;
memset(tails,0,sizeof(tails));
}
void sort()
{
int t;
for (int i=1;i<=22;i++)
{
if (tails[i]==0)
break;
else
{
for (int j=1;j<=tails[i]-1;j++)
for (int k=j+1;k<=tails[i];k++)
{
if (map[i][j] > map[i][k])
{
t = map[i][j];
map[i][j]=map[i][k];
map[i][k]=t;
}
}
}
}
}
void dfs(int x,int y)
{
if ((x < 1)||(x > 22))
return;
if (book[x]==1)
return;
//printf("%d \n",x);
if (x == total)
{
sum++;
for (int i=1;i<=y-1;i++)
{
printf("%d ",way[i]);
}
printf("%d",total);
printf("\n");
return;
}
tail = tails[x];
for (int i=1;i<=43;i++)
{
book[x]=1;
way[y]=x;
dfs(map[x][i],y+1);
book[x]=0;
}
}
int main()
{
int temp1,temp2;
//freopen("ex.in","r",stdin);
//freopen("ex.out","w",stdout);
int c = 0;
while(scanf("%d",&total)!=EOF)
{
c++;
printf("CASE ");
printf("%d",c);
printf(":");
printf("\n");
init();
for (;;)
{
scanf("%d%d",&temp1,&temp2);
if ((temp1 == 0)&&(temp2 == 0))
break;
else
{
tails[temp1]++;
tail = tails[temp1];
map[temp1][tail]=temp2;
tails[temp2]++;
tail = tails[temp2];
map[temp2][tail]=temp1;
}
}
sort();
dfs(1,1);
printf("There are ");printf("%d",sum);printf(" routes from the firestation to streetcorner ");printf("%d",total);printf(".");
printf("\n");
}
return 0;
}