Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ uvaoj 208如何加速我的程序_C++ - Fatal编程技术网

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;
}