,   CyberForum.ru

- C++

 
Xensis
5 / 5 / 0
: 15.07.2010
: 57
30.07.2010, 15:39     #1
( ). , .
, .
Similar
41792 / 34177 / 6122
: 12.04.2006
: 57,940
30.07.2010, 15:39    
:

C++
C++
C++
C++ [C++]
C++
C++
C++
C++



:
.
AKE
11 / 11 / 0
: 09.05.2010
: 384
30.07.2010, 20:00     #2
... , , ...
, :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
struct QItem
{
  int node;
  int prev;
  char Path[50];
};
 
void QAdd(QItem *Q, int &R, char *Path, int node, int prev)
{
  Q[++R].node = node;
  Q[R].prev = prev;
  strcpy(Q[R].Path, Path);
}
 
QItem QGet(QItem *Q, int &L)
{
  return Q[L++];
}
 
void AddPath(char PPath[50][50], int &PPathP, char Path[])
{
  strcpy(PPath[++PPathP], Path);
}
void GetPath(int arr[], int levels[], int x, int y)
{
 //î÷åðåäü
 QItem Q[700];
 int L = 0;
 int R = -1;
 
 char PPath[50][50];// ñïèñîê âûâåäå**ûõ ïóòåé
 int PPathP = -1; // óê*ç*òåëü ** âåðøè*ó ñïèñê*
 
 char Pc[50];    //áóôåð ñòðîê* äëÿ õð**å*èÿ
 QItem QI;
 
 levels[x] = 0;
 sprintf(Pc, "%d", x); //ñîçä**èå ñòðîêè äëÿ êîð*ÿ
 QAdd(Q, R, Pc, x, x);//äîá*âëå*èå êîð*ÿ â î÷åðåäü
 for (int j = 0; j < 30; j++) //öèêë äëÿ äîñò*òî÷*îãî ÷èñë* èòåð*öèé
 {
   if (L > R) return;  // åñëè î÷åðåäü ïóñò* - âûéòè
   QI = QGet(Q, L);    // áåð¸ì 1-ûé ýëåìå*ò èç î÷åðåäè
   int node = QI.node; // Â node ïîìåù*åì *îìåð òåêóùåãî óçë*
   for (int i = 0; i < 10; i++) //ïðîâåðê* âñåõ ñìåæ*ûõ óçëîâ
    {
      if ((i == node) || (QI.prev == i) || (i == x)) continue;//åñëè óçåë i ñîâï*ä*åò ñ node
                                            //èëè ïðåäûäóùèé ê node ñîâï*ä*åò ñ 
                                       //i òî ïðåêð*òèòü òåêóùóþ èòåð*öèþ.
      if (getItem(arr, node, i)) //åñëè ñóùåñòâóåò ðåáðî (node; i)
      {
        sprintf(Pc, "%s%d", QI.Path, i);
        if (levels[i] == -1) 
        {
          levels[i] = levels[node] + 1;       
          if (!IfPathPresent(PPath, PPathP, Pc))
          { 
            if (i==y)
            cout<<Pc<<'\n';
            AddPath(PPath, PPathP, Pc);
          } 
        } else
        {
          if (levels[i] == (levels[node]+1))
          {
            if (!IfPathPresent(PPath, PPathP, Pc))
            {
              if (i==y)
              cout<<Pc<<'\n';
              AddPath(PPath, PPathP, Pc);
            }
          }
        }
        QAdd(Q, R, Pc, i, node);
      }
   }
 }
}
 
void GetPathAll(int arr[], int x, int y)
{
 cout<<'\n';
 int levels[10];
 FillLevels(levels);
 GetPath(arr, levels, x, y);
}
Yandex
30.07.2010, 20:00    

: 15:01. GMT +3.
- , ,
-
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
@Mail.ru