Você pode gerar o caminho ideal usando A * e distorcê-lo com o deslocamento do ponto médio.

Isso garantirá que seus pontos de extremidade sejam atingidos e permitirá que você controle a aleatoriedade em grande parte. Por exemplo, eu não randomizaria estradas tanto quanto rios. Qualquer que seja a inteligência que esteja construindo estradas, normalmente tenta ser ideal.
Tome cuidado para garantir que, se o seu mapa tiver obstáculos, você verifique após cada iteração se não está atravessando esses obstáculos.
Outro método seria gerar o ruído Perlin depois de encontrar o caminho ideal e, em seguida, mudar seus pontos com base no ruído gerado. Por exemplo, usando este ruído:

Em seguida, mostre com o caminho ideal em vermelho e o caminho deslocado em azul:

Observe como o caminho alternado "se estabeleceu" nas áreas mais escuras do ruído. Da mesma maneira que um rio pode fluir através de um vale.
Um benefício da opção de ruído da Perlin é que você pode levar em consideração seus obstáculos e evitá-los como parte do algoritmo.