Esempio n. 1
0
int main(void)
{
	int node_num, edge_num, source;
	struct Graph graph;

	time = 0;
	source = 1;
	while (scanf("%d %d", &node_num, &edge_num) != EOF) {
		initGraph(&graph, node_num);
		input(&graph, edge_num);

		printf("source node of dfs and bfs is %d:\n", source);
		printf("depth first search:\n");
		for (source = 1; source <= graph.node_num; source++)
			dfs(&graph, source, visitNode);
		clearVisit(&graph);	

		printf("breadth first search:\n");
		for (source = 1; source <= graph.node_num; source++)
			bfs(&graph, source);
		clearVisit(&graph);

		printf("traverse by topological order:\n");
		topos(&graph);

		deleteEdge(&graph);
	}

	return 0;
}
Esempio n. 2
0
calculate_id_lines ()
{
  register int i, j;
  int *match, *insdel;
  int prevmatch = 0;
  int ded_reckon = 0;

  match = (int *) alloca (ScreenLength * sizeof (int));
  insdel = (int *) alloca (ScreenLength * sizeof (int));

/* Here should check for last few lines matching exactly,
or all except last two.  */

  for (i = 1; i <= ScreenLength; i++)
    {
      match[i] = ++ded_reckon;
      if (PhysScreen[i]->draw_cost < 10)
	continue;
      for (j = matchmin; j <= ScreenLength; j++)
	{
	  if (PhysScreen[i] == DesiredScreen[j]
	      || (PhysScreen[i]->hash == DsiredScreen[j]->hash))
	    {
	      match[i] = j;
	      ded_reckon = j;
	      matchmin = j + 1;
	      break;
	    }
	}
    }

  
  /* Now match[i] is the line (origin-1)
     that line i should move to.  */

  deficit = 0;
  ded_reckon = 1;
  for (i = 1; i <= window_size; i++)
    {
      insdel = match[i] - ded_reckon;
      ded_reckon = match[i] + 1;
      if (insdel < 0)
	{
	  topos (i - deficit + insdel, 1);
	  deletelines (- insdel);
	  deficit -= insdel;
	}
    }

  ded_reckon = 1;
  for (i = 1; i <= window_size; i++)
    {
      insdel = match[i] - ded_reckon;
      ded_reckon = match[i] + 1;
      if (insdel > 0)
	{
	  topos (i - deficit, 1);
	  deletelines (insdel);
	  deficit -= insdel;
	}
    }

  if (deficit != 0)
    abort ();

  for (i = 1; i < window_size; i++)
    PhysScreen[i] = 0;
  for (i = 1; i < window_size; i++)
    PhysScreen[match[i]] = OPhysScreen[i];
}