(http://oi61.tinypic.com/2lcpt95.jpg)
(http://oi61.tinypic.com/15nlh6c.jpg)
Solución inicial:
(http://oi57.tinypic.com/2vk15zn.jpg)
En caso de no ser igual la oferta y la demanda se crea una fila o una columna con la diferencia.
Ejemplo si tenemos 3 orígenes y 3 destinos de la siguiente forma:
(http://oi59.tinypic.com/23jl5xt.jpg)
El resultado es que la oferta suma 1500 y la demanda 3000 por lo que será necesario crear una columna de oferta ficticia para balancear el problema
(http://oi57.tinypic.com/2db03gy.jpg)
Y ahora se resuelve como exactamente igual que la forma anterior.
En base a la información anterior, desarrolle un programa en Lenguaje C que permita lo siguiente:
a) Cargar la matriz de costos.
b) Cargar el vector de ofertas y demandas.
c) Obtener una solución Inicial por el método de ruta noroeste mostrar la matriz resultante.
d) Obtener el valor de la solución que es la sumatoria de cada costo* cantidad enviada
e) La matriz debe soportar un máximo de 5 orígenes y 5 destinos.
Mi opinión:
la forma de que pensé para hacerlo fue la siguiente:
Crear una matriz que se llene de los costos ingresados por el usuario, con respecto a esta matriz no le veo mucho sentido... porque en si lo que necesito hacer es el camino que se muestra en el ejemplo.
Crear un vector de demandas y otro de ofertas ubicandolos con gotoxy que utiliza la librería #include "myconio.h".
Crear otra matriz donde voy a hacer la operación, y crear el camino que se muestra en el ejemplo, aplique la siguiente lógica:
for(x=0;x<f;x++){
printf("\n");
for(y=0; y<c; y++){
m[x][y]=0;
if(ofertas[x]>demandas[x]){
m[x][x]=demandas[x];//ubicarlo en la cosilla ("noroeste")
m[x][x+1]=ofertas[x]-demandas[x]; // la diferencia de ambos para cuando se sumen de bien
}else
if(ofertas[y]<demandas[y]){
m[y][y]=ofertas[y];
m[y+1][y]=demandas[y]-ofertas[y];
}
printf(" %d ",m[x][y]);
}
}
el problema es: que no esta dando correcto con las columnas, la suma siempre se pasa y no da el numero que deberia dar en la misma posicion de demandas, otra cosa es que nose porque si yo en demandas meto los numero 5, 15, 15, 15 me sale a la ora de imprimirse 5, 15, 5, 15
dejo todo el código hecho hasta ahora:
#include <stdio.h>
#include <stdlib.h>
#include "myconio.h"
#define f 3
#define c 4
void costos_matriz(int costos[][c]);
void funcionof(int ofertas[f], int demandas[c], int m[][c]);
int main(){
int costos[f][c], ofertas[f], demandas[c],m[f][c];
funcionof(ofertas,demandas,m);
system("PAUSE>NULL");
return 0;
}
void costos_matriz(int costos[][c]){
int x, y;
for(x=0;x<f;x++){
for(y=0; y<c; y++){
printf("Ingrese costos: ");
scanf("%d",&costos[x][y]);
}
}
}//costos
void funcionof(int ofertas[f], int demandas[c], int m[f][c]){
int i,x,y,k;
for(i=0; i<f; i++){
printf("ingrese la oferta: ");
fflush(stdin);
scanf("%d",&ofertas[i]);
}
for(i=0; i<c; i++){
printf("ingrese la demandas: ");
fflush(stdin);
scanf("%d",&demandas[i]);
}
system("cls");
for(x=0;x<f;x++){
printf("\n");
for(y=0; y<c; y++){
m[x][y]=0;
if(ofertas[x]>demandas[x]){
m[x][x]=demandas[x];
m[x][x+1]=ofertas[x]-demandas[x];
}else
if(ofertas[y]<demandas[y]){
m[y][y]=ofertas[y];
m[y+1][y]=demandas[y]-ofertas[y];
}
printf(" %d ",m[x][y]);
}
}
printf("\n");
for(x=0; x<f; x++){
gotoxy(16,x+1);
printf(" %d ", ofertas[x]);
}
for(x=0; x<c; x++){
gotoxy(x*3+1,7);
printf( "%d ", demandas[x]);
}
}//ofertas_demandas
Solo me gustaría recibir una pequeña orientación con respecto a esto, ya que no tengo a quien preguntarle y me frustra no poder hacerlo!. Agradecería de verdad su ayuda.