Beispiel #1
0
int main()
{
   int i,j,cases=1;

   while(1) {
      if(scanf("%d",&e)!=1) break;
      e--;
      for(i=0;i<MAXV;i++)
         for(j=0;j<MAXV;j++)
            g[i][j]=INF;
      maxv=0;
      while(1) {
         scanf("%d %d",&i,&j);
         if(i==0 && j==0) break;
         if(i>maxv) maxv=i;
         if(j>maxv) maxv=j;
         i--; j--;
         g[i][j]=1; g[j][i]=1;
      }
      printf("CASE %d:\n",cases++);
      num=0;
      for(i=0;i<maxv;i++) taken[i]=0;
      for(i=0;i<maxv;i++) dijkstra(i);
      taken[0]=1;
      btrack(0,0);
      printf("There are %d routes from the firestation to streetcorner %d.\n",num,e+1);
   }
}
Beispiel #2
0
void btrack(int start,int p)
{
   int i,j;

   if(start==e) {
      printf("1");
      for(i=0;i<p;i++) printf(" %d",path[i]+1);
      printf("\n");
      num++;
      return;
   }
   for(i=1;i<maxv;i++) {
      /* for all available street corners, check if there is a route from start
       * via i to end */
      if(taken[i] || g[start][i]==INF) continue;
      for(j=1;j<maxv;j++)
         if(!taken[j] && distance[start][i]<INF && distance[i][e]<INF)
            goto goon;
      continue;
   goon:
/*      if(distance[i][e]==INF) continue;*/
      taken[i]=1;
      path[p]=i;
      btrack(i,p+1);
      taken[i]=0;
   }
}
Beispiel #3
0
int main (void){
	int a[9];
	scanf("%d",&cnum);
	while(cnum--){
		max = 0;
		for(i = 0; i < 8; i++) for(j = 0; j < 8; j++) scanf("%u",&m[i][j]);
		btrack(a,0);
		printf("%5u\n",max);
	}
	return 0;
}
Beispiel #4
0
void btrack(int a[], int k){
	int c[8];
	int cand = 8;
	int i;
	if(k == 8){
		for(temp = i = 0; i < 8; i++) temp += m[i][a[i+1]];
		if(temp > max) max = temp;
	}
	else {
		++k;
		getcand(a,k,c,&cand);
		for (i = 0; i < cand; i++) {
			a[k] = c[i];
			btrack(a,k);
		}
	}
}