आप नई स्थिति की गणना करने के लिए 1 पुनरावृत्ति चलाएंगे, नया, नया कहें। फिर आप 4 और पुनरावृत्तियों की गणना करेंगे ताकि यह देखने के लिए कि रोबोट न्यूएक्स-न्यूज पर वापस आ गया है या नहीं। यदि ऐसा है, तो सर्कल मौजूद है, अन्यथा नहीं।
त्रिज्या अपने पुनरावृत्ति में रोबोट की अधिकतम दूरी होगी।
कोड कार्यान्वयन -
//North, South, East, West directions
#define N 0
#define S 1
#define E 2
#define W 3
// Function to compute the new pos (x, y, dir) after completing one iteration of the string.
// It will also update the max radius.
void findNewPos(char *str, int *origdir, int *origx, int *origy, double *maxrad) {
int i, len, x, y, dir;
dir = *origdir;
x = *origx;
y = *origy;
len = strlen(str);
i=0;
//Iterate through each character
while(i < len) {
char c = str[i];
switch(c) {
case 'L': // Turn left
switch(dir) {
case N:
x--;
dir = W;
break;
case S:
x++;
dir = E;
break;
case E:
y++;
dir = N;
break;
case W:
y--;
dir = S;
break;
}
break;
case 'R': // Turn right
switch(dir) {
case N:
x++;
dir = E;
break;
case S:
x--;
dir = W;
break;
case E:
y--;
dir = S;
break;
case W:
y++;
dir = N;
break;
}
break;
case 'F': // Go forward
switch(dir) {
case N:
y++;
dir = N;
break;
case S:
y--;
dir = S;
break;
case E:
x++;
dir = E;
break;
case W:
x--;
dir = W;
break;
}
break;
}
// Update max radius till now
double rad = x*x + y*y;
if(rad > *maxrad)
*maxrad = rad;
i++;
}
*origx = x;
*origy = y;
*origdir = dir;
}
// Function to compute the max radius of movement, if bounded
double findCircle(char *str) {
int x=0, y=0, dir=N;
int refx, refy;
double radius = 0, maxrad = 0;
// Starting from origin(x=0, y=0), find new pos after single iteration
findNewPos(str, &dir, &x, &y, &maxrad);
refx = x;
refy = y;
// Find new positions after 4 more iterations
findNewPos(str, &dir, &x, &y, &maxrad);
findNewPos(str, &dir, &x, &y, &maxrad);
findNewPos(str, &dir, &x, &y, &maxrad);
findNewPos(str, &dir, &x, &y, &maxrad);
// Are we back to position where we were after 1st iteration?
if(x == refx && y == refy) {
printf("Circle exists %f!\n", maxrad);
radius = sqrt(maxrad);
}
else {
printf("Circle does not exist!\n");
radius = -1;
}
return radius;
}
पर lattices के विषय की जांच * यादृच्छिक चलता है *। –
गलत प्रश्न या नहीं, लोगों ने इसका उत्तर देने का समय लिया। यदि आप चाहें तो आप एक नया पूछ सकते हैं, लेकिन कृपया इसे हटाएं। – IVlad