Dejo una alternativa que me parece que es más eficaz. (No recorre toda la matriz para comprobar si existe o no el valor).
Como necesitas tener todos los números del 0-99 es mejor aleatorizar la posición que el valor (Creo).
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main()
{
int matriz[10][10], i, j, x, y;
memset(matriz
, 0, sizeof(int)*100);
for(i=0;i<100;i++)
{
if(matriz[x][y]==0)
{
matriz[x][y]=i;
}
else
{
i--;
continue;
}
}
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
}
return 0;
}
EDITO:
El tiempo baja de 0.007s a 0.003s (a veces es 0.004 y el máximo son 0.005 pero los habitual es 0.003) casi la mitad
. Creo que aun se puede mejorar el código.
Añado otro código que hace que casi hasta el 80 se rellene del tirón, creo que puede hacerse sin tanto if, pero no tengo más tiempo hoy. Este código comprueba si las celdas cercanas están en 0 para no tener que repetir el ciclo tantas veces. Creo que aún se puede hacer en menos ciclos del for. Ahora usará unos 129.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
int main()
{
int matriz[10][10], i, j, x, y;
memset(matriz
, 0, sizeof(int)*100);
for(i=0;i<100;i++)
{
if(matriz[x][y]==0)
{
matriz[x][y]=i;
}
else
{
if(matriz[x][y+1]==0 && y+1<10)
{
matriz[x][y+1]=i;
continue;
}
if(matriz[x][y-1]==0 && y-1>=0)
{
matriz[x][y-1]=i;
continue;
}
if(matriz[x-1][y]==0 && x-1>=0)
{
matriz[x-1][y]=i;
continue;
}
if(matriz[x-1][y-1]==0 && x-1>=0 && y-1>=0)
{
matriz[x-1][y-1]=i;
continue;
}
if(matriz[x-1][y+1]==0 && x-1>=0 && y+1<10)
{
matriz[x-1][y+1]=i;
continue;
}
if(matriz[x+1][y]==0 && x+1<10)
{
matriz[x+1][y]=i;
continue;
}
if(matriz[x+1][y-1]==0 && x+1<10 && y-1>=0)
{
matriz[x+1][y-1]=i;
continue;
}
if(matriz[x+1][y+1]==0 && x+1<10 && y+1<10)
{
matriz[x+1][y+1]=i;
continue;
}
i--;
continue;
}
}
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
}
return 0;
}
Sa1uDoS