예제 #1
0
main()
{
 int i,src,dst,nd[20],ttr=0;;
 clrscr();
 freopen("topo.in","r",stdin);
 scanf("%d%d",&n,&e);
 for(i=0;i<=n;i++)
 {
    d[i]=f[i]=NIL;
    nd[i]=i;
 }
 EdgeInit(n);
 for(i=1;i<=e;i++)
 {
   scanf("%d%d",&src,&dst);
   InsertEdge(src,dst,NIL,i);
 }
 t=0;
 for(i=1;i<=n;i++)
 {
   if(d[i]==0) {ttr+=1;printf("\nTree-%d :: ",ttr);Topo(i);}
 }
/* qsort((void *) (nd+1),n,sizeof(nd[0]),SortFunction);
 for(i=1;i<=n;i++)
 {
   printf("%d\n",*(nd+i));
 }*/
 fclose(stdin);
 printf("\nTotal tree=%d",ttr);
 printf("\nOK");
}
예제 #2
0
void Topo(int node)
{
  int i,v;
  d[node]=++t;
  printf(" %d",node);
  i=NodeHead[node];
  while(i!=NIL)
  {
    v=EdgeList[i].dst;
    if(d[v]==0) {Topo(v);}
    i=EdgeList[i].next;
  }
  f[node]=++t;
}
예제 #3
0
void Topo(int node)
{
  int i,v;
  static int j=0;
  d[node]=++t;
  cnd[j++]=node;
  i=NodeHead[node];
  while(i!=NIL)
  {
    v=EdgeList[i].dst;
    if(d[v]==0) Topo(v);
    i=EdgeList[i].next;
  }
  f[node]=++t;
 }
예제 #4
0
파일: main.cpp 프로젝트: faelribeiro22/ED1
int main(){
    Pilha *posfixa = criaPilha();
    Pilha *operadores = criaPilha();
    Pilha *infixa = criaPilha();
    char inf[MAX],letra,t;
    int testes,n,i,j,f=0;
    scanf("%d",&testes);
    while(testes > 0){
        testes--;
        scanf("%s",&inf);
        n = strlen(inf);
        for(i = n-1;i>=0;i--){
            Push(infixa,inf[i]);
        }
        while(!isEmpty(infixa))
        {
            Pop(infixa,&letra);
            if(letra != '+' && letra != '-' && letra != '*' && letra != '/' && letra != '^' && letra != '(' && letra != ')'){
                Push(posfixa,letra);
            }else if(letra == '('){
                Push(operadores,letra);
            }else if(letra == ')'){
                desempilha(posfixa,operadores);
            }else{
                while(precedencia(Topo(operadores)) > precedencia(letra) || precedencia(Topo(operadores)) == precedencia(letra)){
                    Pop(operadores,&t);
                    Push(posfixa,t);
                }
                Push(operadores,letra);
            }
        }
            if(!isEmpty(operadores))
            {
                desempilha_op(posfixa,operadores);
            }
        exibe(posfixa);
        Empty(posfixa);
        Empty(operadores);
    };

    return 0;
}
예제 #5
0
calcir()
{
   int a,b;
   for(a=1;a<=n;a++)
     for(b=1;b<=n;b++)

}
main()
{
 int i,src,dst,nd[20];
 clrscr();
 freopen("dfs.in","r",stdin);
 scanf("%d%d",&n,&e);
 for(i=0;i<=n;i++)
 {
    d[i]=f[i]=NIL;
    nd[i]=i;
 }
 EdgeInit(n);
 for(i=1;i<=2*e;i+=2)
 {
   scanf("%d%d",&src,&dst);
   InsertEdge(src,dst,NIL,i);
   InsertEdge(dst,src,NIL,i+1);
 }
 t=0;
 for(i=1;i<=n;i++)
 {
   if(d[i]==0) Topo(i);calcir();
 }
 qsort((void *) (nd+1),n,sizeof(nd[0]),SortFunction);
 for(i=1;i<=n;i++)
 {
   printf("%d\n",*(nd+i));
 }
 fclose(stdin);
 printf("\nOK");
}