2013-07-21 2 views
-5

어떻게 사용할 수없는 xy 좌표를 가질 수 있습니까? xy (5,5)와 (7,9)를 사용하지 않기를 바란다. 어떻게해야합니까?그리드에서 xy 좌표를 사용할 수 없으면 어떻게해야합니까?

x = random.Next(0, 20); 
y = random.Next(0, 20); 

// if xy coordinate is (5,5) or (7,9), keep trying the above to obtain a different xy value 

xy 좌표가 만들어지면 어떻게 특정 좌표를 사용할 수 없습니까?

+1

슬롯이란 무엇입니까? 그리고 그것을 예약한다는 것은 무엇을 의미합니까? 현재 표시 한 코드는 두 개의 정수를 성공적으로 인스턴스화 한 다음 두 개의 난수를 생성합니다. 작동하지 않는 것은 무엇입니까? – David

+0

"슬롯"이란 무엇입니까? 난수 쌍을 의미합니까? 조건이 충족 될 때까지 단순히 반복 할 수 있습니다. – CodesInChaos

+0

예, 임의의 난수를 사용할 수 없도록 예약하고 싶습니다. – rotaercz

답변

0
당신의 조건이 만족 될 때까지 생성을 통해

그냥 루프에 의해 반환되는 :

var forbidden = new List<Tuple<int, int>>(); 
forbidden.Add(new Tuple<int, int>(5, 5)); 
forbidden.Add(new Tuple<int, int>(7, 9)); 
while(true) 
{ 
    x = random.Next(0, 20); 
    y = random.Next(0, 20); 
    if(forbidden.All(t => x != t.Item1 || y != t.Item2)) break; 
} 

이 방법은 루프는 좌표가 "허용"인 경우에만 종료됩니다 (즉, break 문에 도달).

+0

이것은 내가 찾고있는 것에 매우 가깝습니다. 사용해서는 안되는 xy 좌표 목록을 가질 수 있습니까? – rotaercz

+0

@rotaercz : 답변을 편집했습니다. 그냥 (여기 *// * y로 여기에 * /)/* 새로운 튜플 (X)를'forbidden.Add에 원하는 좌표를 추가,' – pascalhein

+1

너무 감사합니다! – rotaercz

1

0에서 (최대 슬롯)까지의 임의의 숫자를 묻는 대신 번째 비어있는 시간 슬롯을 채우고 빈 슬롯을 추적 할 수 있습니다 (예 : 각 슬롯에 부울 값 사용). 처음에 free time lots = max slots

free time slots 각 할당 후 감소한다. O (N)를 - - 슬롯을 통해 걸어 n 번째 무료 슬롯을 작성 N 수는 Random.Next(0, freeSlots)

+0

일부 예제 코드는 훌륭합니다. – rotaercz

관련 문제